Python - 如何制作带注释的堆叠条形图?

问题描述 投票:0回答:1

我有以下数据框:

df = pd.DataFrame(data = {'id' : ['hbo', 'hbo', 'hbo', 'fox','fox','fox', 'NBC', 'NBC', 'NBC'], 
                     'device': ['laptop', 'tv', 'cellphone','laptop', 'tv', 'cellphone','laptop', 'tv', 'cellphone'], 
                     'count': [100,200,300, 400, 300, 200, 900, 1000, 100], 
                    'date': ['2022-04-30', '2022-05-30','2022-06-30', '2022-07-30', '2022-08-30','2022-09-30', 
                            '2022-10-30', '2022-11-30','2022-12-30']})

我正在尝试编码并制作堆积条形图,其中包含以下内容:

  1. 条形图按计数堆叠,就像普通的堆叠条形图一样
  2. 堆叠条形图区域上的注释显示 %(百分比)
  3. x轴是显示日期
  4. y 轴显示计数
  5. 颜色由设备定义 - 例如电视=“红色”

堆积条形图随时间变化(与折线图相反)

到目前为止,我有以下代码,但我不知道如何使用 matplotlib 旋转数据并创建输出:

fig, ax = plt.subplots(1,1)
ax = df.plot.bar(stacked=True, figsize=(10, 6), ylabel='count', xlabel='dates', title='count of viewing type over time', ax = ax)
plt.legend(title='Category', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.xlabel('Date', fontsize = 14)
plt.ylabel('Count of viewing type', fontsize = 14)
plt.title('plot test', fontsize = 20)
plt.xticks(rotation = 45)
plt.show();
python python-3.x matplotlib plotly
1个回答
0
投票

这可以使用 Plotly express 来完成。我首先创建一个包含百分比值的列。您的数据集每个日期没有多个值,但这将适用于具有多个值的更大数据集。

df['pct'] = (df['count']/df.groupby('date')['count'].transform('sum')).apply(lambda x: '{:,.2%}'.format(x))

然后创建图形。默认情况下,

barmode
是“相对”(又名堆叠),因此无需为此问题指定。

import plotly.express as px

fig = px.bar(df,
             x='date',
             y='count',
             color='device',
             #barmode='relative',
             text='pct')

fig.show()

© www.soinside.com 2019 - 2024. All rights reserved.