天天看點

Python matplotlib繪制餅圖

Python matplotlib繪制餅圖

繼前面使用matplotlib繪制折線圖、散點圖、柱狀圖和直方圖,本篇文章繼續介紹使用matplotlib繪制餅圖。

一、matplotlib繪制餅圖

# coding=utf-8
import matplotlib.pyplot as plt


election_data = {'Biden': 290, 'Trump': 214, 'Others': 538-290-214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'],
        textprops={'fontsize': 24}, labeldistance=1.05)
plt.legend(fontsize=16)
plt.title("2020年A國大選票數占比", fontsize=24)
plt.show()
           

運作結果:

Python matplotlib繪制餅圖

pie(): matplotlib中繪制餅圖的函數。第一個參數傳入用于繪制餅圖的資料清單,其他參數都是關鍵字參數。labels參數用于設定每個扇形的标簽,說明每個扇形的資料歸屬。autopct參數用于設定餅圖中的百分比,一般保留兩位小數,傳入"%1.2f%%"即可。colors參數用于設定每個扇形的顔色,與資料清單一一對應,傳入一個與資料清單長度相等的清單。textprops參數用于設定标簽和百分比的字型、大小等,傳入一個字典。labeldistance參數用于設定标簽與餅圖的距離,預設值為1.1。

餅圖将一個圓餅按照各分類的占比劃分成多個扇形,整個圓餅代表資料的總量,每個扇形表示該分類占總體的比例大小,所有扇形相加的和等于100%。餅圖适用于表示不同分類在總體中的占比情況,通過弧度大小來比較不同分類的占比大小,尤其在需要突出顯示其中某一個部分的占比時。

上面的餅圖繪制了2020年A國大選的票數占比情況,可以一目了然地看到候選人的得票占比情況。如果需要突出顯示某位候選人的得票占比,可以對餅圖進行分離展示。

二、matplotlib旋轉餅圖和突出顯示

import matplotlib.pyplot as plt


election_data = {'Biden': 290, 'Trump': 214, 'Others': 538-290-214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
explode = (0.1, 0, 0)
plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'], textprops={'fontsize': 24},
        labeldistance=1.05, explode=explode, startangle=90, shadow=True)
plt.legend(loc='upper right', fontsize=16)
plt.title("2020年A國大選票數占比", fontsize=24)
plt.axis('equal')
plt.show()
           

運作結果:

Python matplotlib繪制餅圖

在繪制餅圖的pie()函數中,explode參數用于設定每個扇形到圓心的距離,傳入一個與資料清單長度相等的清單,預設每個扇形到圓心的距離都是0,将想要分離展示的扇形距離設定成一個适合的值,如0.1,即可将該部分突出展示。為了展示效果更好,可以使用startangle參數對餅圖進行旋轉(如将分離的扇形旋轉到左側),給startangle參數傳入一個角度,将餅圖逆時針旋轉對應的角度,startangle參數表示的是餅圖的起始角度,預設為正右方向,即傳統的x軸正方形,此方向表示0度,設定起始角度後可以實作旋轉的效果。對扇形進行分離展示後,将shadow參數設定為True,給餅圖添加陰影,使餅圖更立體,餅圖切分的效果會更好。

在對餅圖進行分離後,餅圖的布局會發生變化,為了控制餅圖占用的區域是一個正方形,且避免餅圖變成橢圓形,使用axis('equal')函數,傳入'equal'參數。

在上一張餅圖的基礎上,經過設定後,将獲勝者Biden的得票率突出顯示,可以更突出地展示獲勝者的得票占比。

三、matplotlib繪制環形餅圖

import matplotlib.pyplot as plt


election_data = {'Biden': 290, 'Trump': 214, 'Others': 538-290-214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
explode = (0, 0, 0)
plt.pie(votes, labels=candidate, explode=explode, autopct="%1.2f%%", colors=['c', 'm', 'y'],
        textprops={'fontsize': 24}, labeldistance=1.05, pctdistance=0.85, startangle=90)
plt.pie([1], radius=0.7, colors='w')
plt.legend(loc='upper right', fontsize=16)
plt.title("2020年A國大選票數占比", fontsize=24)
plt.axis('equal')
plt.show()
           

運作結果:

Python matplotlib繪制餅圖

要繪制環形的餅圖,在繪制出餅圖後,再次調用pie()函數繪制一個更小的純白餅圖即可,先後順序不能相反。

在繪制純白的餅圖時,傳入隻有一個資料的清單,一條資料會占滿整個餅圖,占比100%,顔色設定為colors='w'。radius參數預設為1,如果第一張餅圖的radius參數是1,設定白色餅圖的radius參數小于1,得到的白色餅圖就會小于第一張餅圖。此外不需要設定其他參數,白色餅圖不需要顯示百分比,不需要顯示标簽等。

繪制完成小的白色餅圖,環形效果就實作了,還需要調整第一張餅圖的百分比的顯示位置。在pie()函數中,pctdistance參數用于設定百分比顯示離圓心的距離,預設值是0.6,設定環形效果時,可以将pctdistance參數增大,使百分比顯示在環形的中間。同時,因為環形餅圖是通過遮擋實作的,陰影展示不完全,看起來比較别扭,是以不設定shadow參數,去掉陰影。

Python matplotlib繪制餅圖

繼續閱讀