python 視覺化:欄位各種組合對應的巢狀餅圖
阿新 • • 發佈:2018-12-21
先看自定義函式:這是一個最大層數為3的巢狀餅圖,並且輸出3個欄位各種排列對應的巢狀餅圖:
import pandas as pd import matplotlib.pyplot as plt def all_nested_pie(): plt.rcParams['font.sans-serif'] # 解決餅圖不能輸出中文的問題 plt.rcParams['figure.autolayout'] = True # 解決餅圖不能完整儲存的問題(比如因為餅圖太大) for i0 in a: fig, ax = plt.subplots() data0 = df.groupby(i)['income'].sum() data0.plot.pie(autopct='%.1f%%') ax.set(aspect='equal') # 等價於 ax.set(aspect=1) plt.savefig('路徑+{}.png'.format(i)) # 儲存餅圖為png格式圖片 fir i1 in a: if i1 != i: size = 0.3 fig, ax = plt.subplots() # 重新做subplot,不使用上一層級的subplot,也然人易懂 data1 = df.groupby([i0 ,i1])['income'].sum() # 可以直接使用上層級的data0 data0.plot.pie(ax=ax, autopct='%.1f%%', radius=1-size, wedgeprops=dic(width=size, edgecolor='w')) data1.plot.pie(ax=ax, autopct='%.1f%%', radius=1, wedgeprops=dic(width=size, edgecolor='w')) ax.set(aspect='equal') plt.savefig('路徑+{}-{}.png'.format(i ,i1)) for i2 in a: if i2 != i1 and i2 != i0: fig, ax = plt.subplot() data2 = pd.groupby([i0, i1, i2])['income'].sum() data0.plot.pie(ax=ax, autopct='%.1f%%', radius=1-size, wedgeprops=dic(width=size, edgecolor='w')) data1.plot.pie(ax=ax, autopct='%.1f%%', radius=1, wedgeprops=dic(width=size, edgecolor='w')) data2.plot.pie(ax=ax, radius=1+size, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w')) ax.set(aspect='euqal') plt.savefig('路徑P{}-{}-{}'.format(i0, i1, i2)) 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)的大小
data.plot.pie()屬性區域設定:
pctdistance=: 設定autopct相對於radius的位置,等於1表示在半徑端點;
labeldistance=:設定label相對radius的位置,和pctdistance一樣。