天天看點

python 可視化:多字段&嵌套的圓環餅圖

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一樣。