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