每小时直方图 - matplotlib

3

我正在分析英国交通事故的公共数据。

我的数据框看起来像这样:

Index     Time

0         02:30
1         00:37
2         01:25
3         09:15
4         07:53
5         09:29
6         08:53
7         10:05

我想绘制一个直方图,展示事故发生时间的分布情况,这是我的代码:

  import matplotlib
  import matplotlib.pyplot as plt
  import numpy as np
  import datetime as dt
  import matplotlib.dates as mdates
  df['hour']=pd.to_datetime(df['Time'],format='%H:%M')
  df.set_index('hour', drop=False, inplace=True)
  df['hour'].groupby(pd.Grouper(freq='60Min')).count().plot(kind='bar', color='b')

这是输出结果:

这是输出:

Graph

在这个图表中,我想把x轴标签改成'hh:mm'的格式。我该如何做呢?


与此问题中的内容相同,您只需保留字符串的另一半。 - ImportanceOfBeingErnest
2
@mostafazh,感谢您的回答。您的答案有效,但是x轴显示为https://imgur.com/a/0gBB7KJ。因此,x轴没有索引(我正在寻找像01:00h、02:00h、03:00这样的x轴)。 - Fra
不,我希望x轴按时间索引(01:00、02:00、03:00... 而不是02:30、00:30、01:25)。 - Fra
@mostafazh,我的问题是我想按小时分组绘制数据。在我的第一个解决方案中,我做得很对。唯一的问题是datatime格式。我需要01:00而不是01/01/1900 01:00。 - Fra
@mostafazh,非常感谢!!现在它可以正常工作了,在Jupyter中绘图时遇到了一些问题。我刚开始学习Python编程。有关于一个好的IDE的建议吗?我正在使用Jupyter但不是完全满意。我正在寻找一些互动式的东西。 - Fra
显示剩余2条评论
1个回答

4
你所缺少的是设置matplotlib x轴格式的内容:
df.set_index('hour', drop=False, inplace=True)
df = df['hour'].groupby(pd.Grouper(freq='60Min')).count()
ax = df.plot(kind='bar', color='b')
ticklabels = df.index.strftime('%H:%Mh')
ax.xaxis.set_major_formatter(matplotlib.ticker.FixedFormatter(ticklabels))
plt.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接