matplotlib.pyplot.pie官方文檔點選這裡(英)/ 翻譯點選這裡。
先看自定義函數:這是一個最大層數為2的嵌套餅圖,并且輸出3個字段的不同排列對應的嵌套餅圖:
import pandas as pd
import matplotlib.pyplot as plt
def all_nested_pie():
plt.rcParams['font.family'] = ['SimHei'] # 解決餅圖不能輸出中文的問題
plt.rcParams['figure.autolayout'] = True # 解決餅圖不能完整儲存的問題(比如因為餅圖比窗後大)
for i0 in a: # a為自定義字段清單
"""
餅圖隻有1個字段。
"""
fig, ax = plt.subplots()
data0 = df.groupby(i0)['income'].sum()
data0.plot.pie(autopct='%.1f%%')
ax.set(aspect='equal') # 等價于 ax.set(aspect=1)
plt.savefig('路徑+{}.png'.format(i0)) # 儲存餅圖為png格式圖檔
for i1 in a:
if i1 != i:
"""
餅圖有2個不重複字段,即雙層嵌套餅圖。
"""
size = 0.3
fig, ax = plt.subplots() # 重新做subplot,不使用上一層級的subplot,也好了解
data1 = df.groupby([i0 ,i1])['income'].sum() # 可以直接使用上層級的data0
# 通過在同一個圓心繪制多個餅圖實作嵌套餅圖。即通過radius和wedgeprops中的width來實作。
data0.plot.pie(ax=ax, autopct='%.1f%%', radius=1-size, wedgeprops=dict(width=size, edgecolor='w'))
data1.plot.pie(ax=ax, autopct='%.1f%%', radius=1, wedgeprops=dict(width=size, edgecolor='w'))
ax.set(aspect='equal')
plt.savefig('路徑+{}-{}.png'.format(i ,i1))
if __name__ == '__main__': # 啟動函數
df = pd.read_csv('路徑+檔案名.csv', encoding='gbk', low_memory=False)
all_nested_pie()
print('程式運作完畢') # 提示程式運作完畢
注:
plt全局設定:
plt.rcParams['figure.dpi'] : 設定輸出圖的分辨率,預設分辨率100(像素[6.0, 4.0],圖檔尺寸為 600*400);
plt.rcParams['font.size']: 設定餅圖字型(包括autopec和label)的大小
附:“rc”即“run configure”的縮寫(引用連結),在congifuration檔案的名稱結尾是很常見的。它起源于執行你configs的實際需要,它們是自動 run 和啟動的,用來 configure你的東西。它(很早)就有了,比Unix還早。
data.plot.pie()屬性區域設定:
pctdistance=: 設定autopct相對于radius的位置,等于1表示在半徑端點;
labeldistance=:設定label相對radius的位置,和pctdistance一樣。