matplotlib 知識點11:繪制餅圖(pie 函數精講)


餅圖英文學名為Sector Graph,又名Pie Graph。常用於統計學模塊。


 

畫餅圖用到的方法為:matplotlib.pyplot.pie( )

#!/usr/bin/env python
#!-*-coding:utf-8 -*-
#!@Author : Biyoulin
#!@Time   : 2018/9/4 10:45

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽

labels = ['娛樂','育兒','飲食','房貸','交通','其它']
sizes = [2,5,12,70,2,9]
explode = (0,0,0,0.1,0,0)
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)
plt.title("餅圖示例-8月份家庭支出")
plt.show()  

 上面的圖形為橢圓形,可加入以下一條命令將之顯示為長寬相等的餅圖。

plt.axis('equal')   #該行代碼使餅圖長寬相等

 



pie 函數格式:

def pie(x, explode=None, labels=None, colors=None, autopct=None,
        pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None,
        radius=None, counterclock=True, wedgeprops=None, textprops=None,
        center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None)

pie 函數參數詳解,英文原版請參見:matplotlib官網pie函數: 

x       :(每一塊)的比例,如果sum(x) > 1會使用sum(x)歸一化;
labels  :(每一塊)餅圖外側顯示的說明文字;
explode :(每一塊)離開中心距離;
startangle :起始繪制角度,默認圖是從x軸正方向逆時針畫起,如設定=90則從y軸正方向畫起;
shadow  :在餅圖下面畫一個陰影。默認值:False,即不畫陰影;
labeldistance :label標記的繪制位置,相對於半徑的比例,默認值為1.1, 如<1則繪制在餅圖內側;
autopct :控制餅圖內百分比設置,可以使用format字符串或者format function
        '%1.1f'指小數點前后位數(沒有用空格補齊);
pctdistance :類似於labeldistance,指定autopct的位置刻度,默認值為0.6;
radius  :控制餅圖半徑,默認值為1;
counterclock :指定指針方向;布爾值,可選參數,默認為:True,即逆時針。將值改為False即可改為順時針。
wedgeprops :字典類型,可選參數,默認值:None。參數字典傳遞給wedge對象用來畫一個餅圖。例如:wedgeprops={'linewidth':3}設置wedge線寬為3。 textprops :設置標簽(labels)和比例文字的格式;字典類型,可選參數,默認值為:None。傳遞給text對象的字典參數。 center :浮點類型的列表,可選參數,默認值:(0,0)。圖標中心位置。 frame :布爾類型,可選參數,默認值:False。如果是true,繪制帶有表的軸框架。 rotatelabels :布爾類型,可選參數,默認為:False。如果為True,旋轉每個label到指定的角度。

pie()函數各參數示例:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽

labels = 'A','B','C','D'
sizes = [10,10,10,70]
plt.pie(sizes,labels=labels)

plt.title("餅圖詳解示例")
plt.text(1,-1.2,'By:Biyoulin')
plt.show()

1、x:每一塊餅圖的比例,為必填項,如果sum(x)>1,會將多出的部分進行均分;

sizes = [10,10,20,60]   

2、labels : 每一塊餅圖外側顯示的說明文字;

labels = 'A','B','C','Change'

3、explode : 每一塊餅圖 離開中心距離,默認值為(0,0),就是不離開中心;

explode = (0,0,0.1,0)  #將第三塊分離出來

4、colors:數組,可選參數,默認為:None;用來標注每塊餅圖的matplotlib顏色參數序列。如果為None,將使用當前活動環的顏色。

colors = ['r','g','y','b']  #自定義顏色列表
plt.pie(sizes,explode=explode,labels=labels,colors=colors)

5、shadow :是否陰影,默認值為False,即沒有陰影,將其改為True,顯示結果如下圖所示;

plt.pie(sizes,explode=explode,labels=labels,colors=colors,shadow=True)  # 添加陰影

6、autopct :控制餅圖內百分比設置,可以使用format字符串或者format function;

  '%1.1f':指小數點后保留一位有效數值;

plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f',shadow=True) 

plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',shadow=True) #保留兩位小數點,增加百分號(%);

7、startangle :起始繪制角度,默認圖是從x軸正方向逆時針畫起,如設定startangle=90則從y軸正方向畫起; 

plt.pie(sizes,explode=explode,labels=labels,
       colors=colors,autopct='%1.2f%%',shadow=True,startangle=30)

8、counterclock:指定指針方向;布爾值,可選參數,默認為:True,即逆時針。將值改為False即可改為順時針。

plt.pie(sizes,explode=explode,labels=labels,
        colors=colors,autopct='%1.2f%%',shadow=True,startangle=30,counterclock=False) 

9、labeldistance : label繪制位置,相對於半徑的比例, 如<1則繪制在餅圖內側,默認值為1.1; 

plt.pie(sizes,explode=explode,labels=labels,colors=colors,
        autopct='%1.2f%%',shadow=True,labeldistance=0.8,startangle=30,counterclock=False)

 

10、radius :控制餅圖半徑;浮點類型,可選參數,默認為:None。如果半徑是None,將被設置成1。 

plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',
        shadow=True,labeldistance=0.8,startangle=30,radius=1.3,counterclock=False)  

11、pctdistance : 類似於labeldistance,指定autopct的位置刻度,默認值為0.6; 

plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',
        pctdistance=0.4,shadow=True,labeldistance=0.8,startangle=30,radius=1.3,counterclock=False) 

12、textprops :設置標簽(labels)和比例文字的格式;字典類型,可選參數,默認值為:None。

plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',
        pctdistance=0.4,shadow=True,labeldistance=0.8,startangle=30,radius=1.3,
        counterclock=False,textprops={'fontsize':20,'color':'black'})

13、將餅圖顯示為正圓形,plt.axis( );

plt.axis('equal')

14、添加圖例,plt.legend( );

plt.legend(loc="upper right",fontsize=10,bbox_to_anchor=(1.1,1.05),borderaxespad=0.3)
# loc =  'upper right' 位於右上角
# bbox_to_anchor=[0.5, 0.5] # 外邊距 上邊 右邊
# ncol=2 分兩列
# borderaxespad = 0.3圖例的內邊距

15、保存圖表,plt.savefig( ); 

plt.savefig("C:\\餅圖02.png",dpi=200,bbox_inches='tight')  

 

 1 #!/usr/bin/env python
 2 #!-*-coding:utf-8 -*-
 3 #!@Author : Biyoulin
 4 #!@Time   : 2018/9/4 16:43
 5 
 6 import matplotlib.pyplot as plt
 7 plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽
 8 
 9 # labels = 'A','B','C','D'
10 labels = 'A','B','C','Change'
11 # sizes = [10,10,10,70]
12 sizes = [10,10,20,60]
13 explode = (0,0,0.1,0)
14 colors = ['r','g','y','b']
15 
16 plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',
17         pctdistance=0.4,shadow=True,labeldistance=0.8,startangle=30,radius=1.3,
18         counterclock=False,textprops={'fontsize':20,'color':'black'})
19 
20 plt.title("餅圖詳解示例")
21 plt.text(1,-1.2,'By:Biyoulin')
22 plt.axis('equal')
23 plt.legend(loc="upper right",fontsize=10,bbox_to_anchor=(1.1,1.05),borderaxespad=0.3)
24 # loc =  'upper right' 位於右上角
25 # bbox_to_anchor=[0.5, 0.5] # 外邊距 上邊 右邊
26 # ncol=2 分兩列
27 # borderaxespad = 0.3圖例的內邊距
28 
29 plt.savefig("C:\\餅圖02.png",dpi=200,bbox_inches='tight')
30 plt.show()
餅圖示例完整代碼

 

作者:biyoulin

出處:http://www.cnblogs.com/biyoulin/

版權聲明:本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM