[英]Plot pie chart with values
我的 df 在下面
sales_qtr_month = sales_qtr.groupby(['Month']).agg('sum')
Sales2015 Sales2016
Month
Q1 5.485800e+06 6.997953e+06
Q2 5.390862e+06 7.237361e+06
Q3 6.164094e+06 7.861546e+06
Q4 5.713634e+06 7.567868e+06
饼图代码
sales_qtr_month.plot.pie(figsize=(15,15),subplots=True)
我不确定如何生成您的数据,因此我将生成类似的内容以涵盖所有步骤。
# Make some data
raw_data = {'Sales2016': [10, 20, 900, 100, 50],
'Sales2015': [10, 20, 30, 100, 50],
'Month': ['Q1', 'Q2', 'Q3', 'Q4', 'Q5']}
# Generate a dataframe
df = pd.DataFrame(raw_data, columns = ['Sales2016','Sales2015', 'Month'])
在此之后,我将运行 groupby() ,它根本不会更改数据。 这个 groupby() 的目的是获取类似于 OP 给出的 DataFrameGroupBy。
df_sum = df.groupby(['Month']).agg('sum')
哪些构造
Sales2016 Sales2015
Month
Q1 10 10
Q2 20 20
Q3 900 30
Q4 100 100
Q5 50 50
从这一点来看,我会将 DataFrameGroupBy 展平并用月份对其进行索引。
df_flatten = df_sum.reset_index().set_index('Month')
史蒂文提供的链接对如何在 matplotlib 中进行标记提供了非常好的见解。 函数 pandas.DataFrame.plot.pie 包装了 matplotlib.pyplot.pie(),因此我们可以使用该链接中的一些技术。
首先我们声明一个函数来将百分比转换为整数。 此功能类似于此链接提供的功能。 我在函数中添加了 round() 以便它不会给出错误的数字(例如 int(889.99) = 899 但我们想要 900)
# Covert percent and total to value
def func(pct, allvals):
absolute = int(round(pct/100*np.sum(allvals)))
return "${:.1f}".format(absolute)
现在我们可以用标签绘制饼图,我们可以指定类似于链接中的 autopct
f, axes = plt.subplots(1,2, figsize=(10,10))
for ax, col in zip(axes, df_flatten.columns):
print(col)
df_flatten[col].plot(kind='pie', autopct=lambda pct: func(pct, df_flatten[col].tolist()), labels=df_flatten.index, ax=ax, title=col, fontsize=10)
ax.legend(loc=3)
您的标签现在应该出现了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.