使用C語言繪制統(tǒng)計圖中的餅圖
統(tǒng)計圖餅圖繪制方法(C語言)
常用的統(tǒng)計圖有條形圖、柱形圖、折線圖、曲線圖、餅圖、環(huán)形圖、扇形圖。
前幾類圖比較容易繪制,餅圖繪制較難。今值此介紹餅圖的繪制方法。
本方法采用C語言的最基本功能:
(1) 繪圖功能畫線,畫圓,畫長方形。
(2) 界面美工設計,界面文字打印輸出。
代碼中有詳細的注釋,通俗易懂,一看就會。
效果圖
實現(xiàn)代碼
下面是繪制餅圖的代碼:
//變量: 可設置成全局變量或私有變量 Canvas cs ; //畫布,繪制圖表載體 float pi=3.1415926535 ; float a ; //三角函數(shù) sin (a), cos (a), float r ; //圓半徑 radius int i, j, n ; float x0,y0,x1,y1 ; //作圖坐標 float dx,dy ; //中心坐標 string ss, ss1, ss2 ; //打印文字 //餅圖的代碼 PieGraph ( ): PieGraph ( ) { //繪制餅圖和突出顯示圖塊 int p[6] ; //set data or get data int k[6] ; //作圖數(shù)據(jù)換算 double pn ; //顯示百分比數(shù) " 29.16% " int setn ; //突出圖塊選項 double ma ; //圖上標文字 " 29.16% " cs.ClearDraw (0,src); //清屏(cls), clear screen cs.SetFillMode (1);//0不填色,1填色 cs.SetColor (255,250,250,250); cs.DrawRect (0,4,720,600); //畫圖表底板 cs.SetColor (255,140,140,140); cs.DrawRect (24,24,706,586); //back cs.SetColor (255,230,240,250); cs.DrawRect (20,20,700,580); //back cs.SetFillMode (0); //0不填色,1填色 cs.SetColor (255,0,0,240); cs.DrawRect (20,20,700,580); //框線 cs.DrawRect (24,24,696,576); //框線 cs.SetFillMode (1); //0不填色,1填色 cs.SetTextSize (28); //題標 cs.SetColor (255,0,0,250); cs.DrawText ("達克科技?DUCK",470,60) ; cs.SetStrokeWidth(2); //圖例: 圖表底板寬高 720 *600 dx=360 ; dy=300 ; //center cs.SetColor(255,250,240,240); cs.DrawCircle(dx,dy,128); //圖底板圓形 cs.SetTextStyle (0); cs.SetTextSize (18); r=120 ; //radius setn=1 ; //突出圖塊選項 p[1]=210; p[2]=165; p[3]=115; p[4]=135; p[5]=95; //預設置數(shù)據(jù) p (5) //*本圖例預設置數(shù)據(jù),可另行設計數(shù)據(jù)輸入方法 //為保證圖案填充色需增加線條密度,故作圖整個 //圓分為 720 線,data p(n) 湊數(shù)成720。 //*若其他數(shù)據(jù)項要按比例換算成總數(shù)相加為720的數(shù)。 //若數(shù)據(jù)項和不滿 720 圖樣就變?yōu)樯刃巍? //輸入數(shù)據(jù) p(n) 轉(zhuǎn)換成繪圖數(shù)據(jù)值 k(n) k[0]= -180; k[1]=k[0]+p[1]; k[2]=k[1]+p[2]; k[3]=k[2]+p[3]; k[4]=k[3]+p[4]; k[5]=k[4]+p[5]; for (n=1; n<=5 ; n++){ //data=5,繪制餅圖 for (i= k[n-1] ; i<=k[n] ; i++){ //draw Piegraph a=pi/360*i ; //** a/2 繪出的是半圓圖形 if (n==1) cs.SetColor(255,0,250,0); if (n==2) cs.SetColor(255,240,140,0); if (n==3) cs.SetColor(255,250,0,0); if (n==4) cs.SetColor(255,140,40,220); if (n==5) cs.SetColor(255,0,150,180); x0=(float)(r*cos (a))+dx; //r=radius y0=(float)(r*sin (a))+dy; cs.DrawLine (dx,dy,x0,y0); //逐線繪出 cs.DrawRect (100,n*50,195,30+n*50); //色標 //** print data as "29.16%" s=intToString (p[n]); cs.DrawText (s, 60,20+n*50); pn=p[n]*10000/720 ; //擴大100, +"%" pn=pn/100 ; //保留2位小數(shù) ss1=doubleToString (pn)+"%" ; cs.SetColor(255,250,250,250); cs.DrawText (ss1,120,20+n*50); if (n==1&&setn==1) ss2=ss1 ; if (n==2&&setn==2) ss2=ss1 ; cs.SetColor(255,0,0,150); //圖上標( n% ) ma=pi/360*((k[n-1]+k[n])/2) ; x1=(float)((r-45)*cos (ma))+dx-30; y1=(float)((r-35)*sin (ma))+dy ; cs.DrawText (ss1,x1,y1); //*畫環(huán)圖方法: 中心加圓是環(huán)圖,不加圓是餅圖 //cs.SetColor(255,250,240,240); //cs.DrawCircle(dx,dy,50); //中心加圓是環(huán)圖 cs.Update (); } } //逐線動畫顯示繪制過程 //* 演示繪制重點突出的圖塊,暫設圖例1 和 圖例2 //* 展示二種畫法 //*** //*本圖例預設置,可另設計圖表點擊選取或其他選項方法 。 // 預設 setn=1 ; 0=無,setn1-5 可選。 // for (i= k[0] ; i<=k[1] ; i++){ 設置通用 k (n) , kstart to kend 即可 //*此方法可改寫為 setn1-setn5 通用方法。 sleep (500) ; //延時 if (setn==1){ for (i= k[0] ; i<=k[1] ; i++){ //銷隱圖塊,圓底色遮罩 a=pi/360*i ; cs.SetColor (255,250,240,240); x0=(float)(r*cos (a))+dx; y0=(float)(r*sin (a))+dy; cs.DrawLine (dx,dy,x0,y0); } cs.Update (); //銷隱 for (i= k[0] ; i<=k[1] ; i++){ //繪出突出圖塊 a=pi/360*i ; cs.SetColor (255,0,240,0); x0=(float)(r*cos (a))+dx+8 ; y0=(float)(r*sin (a))+dy-6 ; cs.DrawLine (dx+8,dy-6,x0,y0); //draw out cs.SetColor (255,250,250,0); cs.SetTextSize (20); //show text cs.DrawText (ss2,dx+20,dy-42) ; cs.Update (); } } //setn=1, 繪出突出色塊 if (setn==2){ for (i= k[1] ; i<=k[2] ; i++){ //銷隱圖塊 a=pi/360*i ; cs.SetColor (255,250,240,240); x0=(float)(r*cos (a))+dx; y0=(float)(r*sin (a))+dy; cs.DrawLine (dx,dy,x0,y0); } cs.Update (); //銷隱 a=pi/360*((k[1]+k[2])/2) ; //*** 這是第二種畫法 x1=(float)(10*cos (a))+dx ; y1=(float)(10*sin (a))+dy ; for (i= k[1] ; i<=k[2] ; i++){ //繪出突出圖塊 a=pi/360*i ; cs.SetColor (255,240,140,0); x0=(float)(r*cos (a))+x1; //*** y0=(float)(r*sin (a))+y1; //*** cs.DrawLine (x1,y1,x0,y0); //*** draw out cs.SetColor (255,250,250,0); cs.SetTextSize (20); //show text cs.DrawText (ss2,x1+15,y1+60) ; //*** cs.Update (); } } //setn=2, 繪出突出色塊 //繪制立體字 cs.SetFillMode (1); //0不填色,1填色 cs.SetTextSize (60); cs.SetTextStyle (1); cs.SetStrokeWidth(1); ss="統(tǒng)計圖 - 餅圖" ; cs.SetColor(255,50,120,20); cs.DrawText (ss,154,524); //陰影 cs.SetColor(255,0,200,250); cs.DrawText (ss,150,520); //本字 cs.SetFillMode (0); //0不填色,1填色 cs.SetColor(255,250,0,0); cs.DrawText (ss,150,520); //框線 cs.Update (); //顯示 }//PieGraph () //**** END *****************
到此這篇關于使用C語言繪制統(tǒng)計圖中的餅圖的文章就介紹到這了,更多相關C語言餅圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
64位linux 編譯c提示gnu/stubs-32.h:No such file or directory的解決方法
這篇文章主要介紹了64位linux 編譯c提示gnu/stubs-32.h:No such file or directory的解決方法,需要的朋友可以參考下2020-03-03C語言常用庫函數(shù)的使用及模擬實現(xiàn)詳解例舉
C語言庫函數(shù)是把自定義函數(shù)放到庫里,是別人把一些常用到的函數(shù)編完放到一個文件里,供程序員使用,下面讓我們一起來詳細了解它2022-04-04C語言位段(位域)機制結(jié)構體的特殊實現(xiàn)及解析
這篇文章主要為大家介紹了C語言位段位域機制結(jié)構體的特殊實現(xiàn)講解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-02-02