天天看点

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