【问题标题】:How to plot bar chart when the columns of the data are each day of each month?当数据的列是每个月的每一天时,如何绘制条形图?
【发布时间】:2019-12-26 07:01:25
【问题描述】:

我不知道如何像这张照片那样绘制条形图。

谁能帮帮我?

【问题讨论】:

标签: python-3.x jupyter-notebook


【解决方案1】:

pandas 命令Series.plot.bar 接受color 关键字,您可以在其中输入颜色列表(RGBA 或颜色名称)。我不完全确定当列表太短时命令遵循什么逻辑,但如果列表长度合适,它会起作用。 示例:

%matplotlib inline
import pandas as pd
this_series = pd.Series([0.5, 0.6, 0.1, 0.1, 0.05, 0.05, 0.7, 0.3, 0.2], name='foo')
this_series.plot.bar(color=['blue','black', 'brown', 'red','red','green','yellow'])

编辑:

从您的cmets,我想我可以理解您的问题。将来,请帮助社区通过制定更清晰的问题来帮助您。

要绘制每月值的总和,您的数据结构如示例中所示,您可以这样做:

数据(请参阅 - 一个仍然足以使用的最小示例):

df = pd.DataFrame(columns = ['hour_formatted', '11_jan_18', '13_jan_18', '14_mar_18'],
                 data = [['00:00', 3, 3, 4], ['00:01', 6, 3, 4], ['00:01', 100, 300, 500]])

“小时”是不需要的,我们可以将每天的数据值求和(毕竟,我们会按月求和……或者我认为是这样)。

df2 = df.drop('hour_formatted', axis=1).sum()

之后,我们只需要从一天开始的月份。在您的格式中,它是 '_' 拆分时的第二项:

df2.index = [x.split('_')[1] for x in df2.index]
df2.index.rename('month', inplace=True)

之后,您可以按月分组 (see groupby from docs),并绘制条形图:

df3 = df2.reset_index().groupby('month').sum()[0] # the [0] part is to take first column from a dataframe that's created here. There might be a more elegant way
df3.plot.bar(color=['black', 'red'])

【讨论】:

  • 感谢您的回复。我的问题是如何在照片中实现这样的条形图,而不仅仅是条形图的颜色。如您所见,我的数据有几个月和几天。我想知道如何在考虑所有日子的情况下绘制每个月的条形图。
  • 这是应该在问题正文中的信息。例如:“我有这个数据 [添加最小示例],我想用每月的数据绘制一个条形图(带颜色)”。以后请多花点时间在如何写出清晰的问题上;否则,很难回答。
  • 至于你的问题,如果我理解的话,你的数据存储在不同的列中(每一列都是一天),其中的行是一天中的时间(hh:mm),你想求和按月。我说的对吗?
  • 除了第一列是小时之外,其他列都是天。行是密度。
  • 非常感谢您提供代码。所有作品。你能告诉我我应该如何添加其他月份吗?顺便说一句,我怎样才能在我的数据中使用实数?我的意思是,不是您提供的这些数字 (['00:01', 100, 300, 500]) ,而是如何使用位于每个月底部的数字?
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多