python绘制饼图双层_有趣!如何用Python-matplotlib绘制双层饼图及环形图?
(1)
餅圖(pie),即在一個圓圈內(nèi)分成幾塊,顯示不同數(shù)據(jù)系列的占比大小,這也是我們在日常數(shù)據(jù)的圖形展示中最常用的圖形之一。
在python中常用matplotlib的pie來繪制,基本命令如下所示(python3.X版本):
vals = [1, 2, 3, 4]#創(chuàng)建數(shù)據(jù)系列
fig, ax = plt.subplots()#創(chuàng)建子圖
labels = 'A', 'B', 'C', 'D'
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
explode = (0, 0.1, 0, 0)
ax.pie(vals, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=90,radius=1.2)
ax.set(aspect="equal", title='Pie plot with `ax.pie`')#設置標題以及圖形的對稱
plt.show()
Paste_Image.png
上圖是在對餅圖的模塊顏色、標簽、百分比、標題、角度、圓形半徑,以及某一塊凸出(explode)進行設置后,最終呈現(xiàn)的圖形效果。大部分設置來自于pie()函數(shù)內(nèi),即:
pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6,
shadow=False, labeldistance=1.1, startangle=None, radius=None)
對于該函數(shù)內(nèi)各參數(shù)的含義,網(wǎng)上資料比比皆是,在這里不再贅述,大家可以根據(jù)自己需求來多次嘗試,設置美化圖形。
(2)
目前matplotlib中尚無雙層餅圖繪制的專門介紹,但是,我們注意到pie()函數(shù)中有個餅圖半徑的設置——radius,于是,我就想:可不可以在同一個figure下繪制兩個不同的圓餅,形成嵌套餅圖,從而制作出雙層餅圖?比如:
vals1 = [1, 2, 3, 4]
vals2 = [2, 3, 4, 5]
fig, ax = plt.subplots()
labels = 'A', 'B', 'C', 'D'
ax.pie(vals1, radius=1.2)
ax.pie(vals2, radius=1)
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
plt.show()
Paste_Image.png
初戰(zhàn)告捷!令我信心大增!
因此,在matplotlib下繪制雙層餅圖的方法可以總結(jié)為:基于不同的數(shù)據(jù)系列,分別設計兩個餅圖,嵌套在一起,對每個餅圖的pie()函數(shù)內(nèi)參數(shù)radius進行設置,就可以得到雙層餅圖。
(3)
但是,可以看到上面的那個圖形還有點粗糙,還可以加入百分比、color等等,進一步設置:
vals1 = [1, 2, 3, 4]
vals2 = [2, 3, 4, 5]
fig, ax = plt.subplots()
labels = 'A', 'B', 'C', 'D'
ax.pie(vals1, radius=1.2,autopct='%1.1f%%',pctdistance=0.9)
ax.pie(vals2, radius=1,autopct='%1.2f%%',pctdistance=0.5)
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
#plt.legend()
plt.legend(labels,bbox_to_anchor=(1.05, 1), loc='best', borderaxespad=0.)
plt.show()
美化的餅圖.png
為方便,在這里沒有對顏色、角度進行參數(shù)設置,后期若大家有興趣,可以進一步加入不同參數(shù)再次設置。在這里主要說明的是:
1、圖中各餅塊的百分比數(shù)據(jù),也在各自餅圖中對pctdistance(百分比離圓形距離)進行不同設置,以便區(qū)分開,這里邊也經(jīng)過多次嘗試;
2、對于各餅塊顏色代表的數(shù)據(jù)系列標簽,采用圖例的方式plt.legend(),放在右邊,不然餅圖中展示的文本內(nèi)容過多,會影響圖形效果;
3、legend()的圖例的位置可以通過關(guān)鍵字參數(shù) loc 指定,bbox_to_anchor 關(guān)鍵字可讓用戶手動控制圖例布局。 例如,如果你希望軸域圖例位于圖像的右上角而不是軸域的邊角,則只需指定角的位置以及該位置的坐標系。
(4)
進一步地,在雙層餅圖的基礎(chǔ)上,我又在想:可不可以繪制雙層環(huán)形圖。
在這里也就是轉(zhuǎn)換一下思路:在兩個餅圖里邊再加個小圓形圖,并設置成白色背景。經(jīng)過嘗試,結(jié)果也如我所愿:
vals1 = [1, 2, 3, 4]
vals2 = [2, 3, 4, 5]
vals3=[1]
fig, ax = plt.subplots()
labels = 'A', 'B', 'C', 'D'
ax.pie(vals1, radius=1.2,autopct='%1.1f%%',pctdistance=0.9)
ax.pie(vals2, radius=1,autopct='%1.1f%%',pctdistance=0.75)
ax.pie(vals3, radius=0.6,colors='w')
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
#plt.legend()
plt.legend(labels,bbox_to_anchor=(1, 1), loc='best', borderaxespad=0.)
plt.show()
Paste_Image.png
其原理為:繪制三個嵌套餅圖,其中最里邊的餅圖,設置半徑較小,整個餅圖只有一個變量,因此不會分割,同時將背景色設置成白色colors='w',如此,大功告成!
實際上,還可以進一步延伸,繪制多層餅圖、多層環(huán)形圖,其原理都是繪制半徑不同的pie,并設置不同的參數(shù)。
總結(jié)
以上是生活随笔為你收集整理的python绘制饼图双层_有趣!如何用Python-matplotlib绘制双层饼图及环形图?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse索引4超出范围_Pytho
- 下一篇: python基础ppt_Python基础