生成python按图分组的条形图时间序列

Posted

技术标签:

【中文标题】生成python按图分组的条形图时间序列【英文标题】:Generating a python plotly grouped bar chart timeseries 【发布时间】:2020-12-07 15:08:12 【问题描述】:

我正在尝试从分组的 df 中生成一个绘图条形图。我有 groupby python 语句排序的数据。数据排列得当,但我无法生成绘图条形图。

python 给出一个值错误 ValueError:“x”的值不是“data_frame”中列的名称。应为 ['amount'] 之一,但收到:Issued_Date

此外,我希望条形图可以堆叠。例如,第 0 行和第 5 行是相同的日期,所以我想要堆叠条形

df_A = df_pre.groupby(['Transaction','Type'])["amount"].resample('M').sum().to_frame('amount')

fig = px.bar(df_A, x='Issued_Date', y='amount', color='Type',
             title='Timeseries amount',
             barmode='group',
             height=600
            )

fig.show()

df_A.to_dict('split')
'index': [('No', 'B', Timestamp('2019-03-31 00:00:00')),
  ('No', 'E', Timestamp('2018-10-31 00:00:00')),
  ('No', 'H', Timestamp('2019-07-31 00:00:00')),
  ('So', 'B', Timestamp('2018-12-31 00:00:00')),
  ('So', 'E', Timestamp('2018-12-31 00:00:00')),
  ('So', 'H', Timestamp('2019-03-31 00:00:00')),
  ('So', 'H', Timestamp('2019-05-31 00:00:00')),
  ('So', 'H', Timestamp('2019-06-30 00:00:00')),
  ('So', 'H', Timestamp('2019-07-31 00:00:00'))],
 'columns': ['amount'],
 'data': [[39.21],
  [64.49],
  [572.78],
  [13.46],
  [44.54],
  [13.96],
  [0.0],
  [46.76],
  [13.28]]

【问题讨论】:

这是dfA的截图吗?还是别的什么? 是的。我不知道如何提交表格,所以我导出到 csv 然后复制截图。此 csv 导出仅用于屏幕截图。希望有帮助 请分享您的数据,如this '个人': ('No', 'E', Timestamp('2018-10-31 00:00:00')): 64.49, ('No', 'H' , Timestamp('2019-07-31 00:00:00')): 572.78, ('So', 'H', Timestamp('2018-12-31 00:00:00')): 58.0, (' So', 'H', Timestamp('2019-01-31 00:00:00')): 0.0, ('So', 'H', Timestamp('2019-02-28 00:00:00') ): 0.0, ('So', 'H', Timestamp('2019-03-31 00:00:00')): 39.21, ('So', 'E', Timestamp('2019-07-31 00' :00:00')): 13.28 我编辑了这篇文章。再次感谢。 【参考方案1】:

我提到了official reference,看到你的问题适用于它。

import pandas as pd
import numpy as np
import io

data = '''
Transaction Type Issued_date Value
Div H 2020-2-9 84.5
Div H 2020-5-10 84.49
Div H 2020-6-7 78.13
Div I 2020-4-5 124.04
Div A 2020-2-9 40.65
Div A 2020-3-8 38.51
Div A 2020-11-12 39.99
Shell B 2020-9-16 -463.29
'''

df = pd.read_csv(io.StringIO(data), sep='\s+')

import plotly.express as px

fig = px.bar(df, x="Issued_date", y="Value", color="Type", title="Transaction", barmode='group', height=600)
fig.show()

【讨论】:

太棒了。虽然,我会更清楚,我宁愿直接从多索引 df 生成图形并消除导出和导入。不过,此导出和导入将是不必要的步骤。

以上是关于生成python按图分组的条形图时间序列的主要内容,如果未能解决你的问题,请参考以下文章

Python中的分组、百分比和条形图

Python使用seaborn可视化分组条形图并且在分组条形图的条形上添加数值标签(seaborn grouped bar plot add labels)

Python:分组数据的seaborn条形图

Pandas:按日历周分组,然后为实际日期时间绘制分组条形图

Python使用matplotlib绘制柱状图(bar plot)实战:水平条形图垂直条形图分组条形图堆叠条形图

Python使用seaborn可视化分组条形图(side by side)并且在分组条形图的条形上添加数值标签(seaborn grouped bar plot add labels)