繁体   English   中英

用值绘制饼图

[英]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)

在此处输入图片说明

  • 如何将 Q1、Q2、Q3、Q4 的值添加到图表中?

我不确定如何生成您的数据,因此我将生成类似的内容以涵盖所有步骤。

# 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM