仅在Matplotlib中绘制时间(而不是DateTime)

时间:2018-03-07 03:14:39

标签: python matplotlib

我的Dataframe采用此格式

   Time    AvgDiff
07:00:00   7.750782
07:01:00   9.306567
07:02:00  13.225209
07:03:00  18.346431
07:04:00  10.049761
07:05:00  18.567049
07:06:00  -4.903014
07:07:00 -10.66217

我做了以下创建合成日期,日期并不重要,因为我的AvgDiff是特定时间值的所有日期的平均值

my_day = datetime.date(2018, 1, 15)
x_dt = [ datetime.datetime.combine(my_day, t) for t in df['Time'] ]
x = x_dt
y1 = df['AvgDiff']


plt.bar(x,y1, label='AvgDiff BPS', width=0.001) #bar to plot
plt.legend(loc='best')
plt.title('AvgDiff BPS')
plt.ylabel('BPS')
plt.xlabel('Time')
plt.gcf().autofmt_xdate()
plt.show()

显示

enter image description here

它显示了日期和时间(在X轴中),但是我需要它只显示小时和分钟。

我试过

FMT = '%H:%M:%S'
df['Time'] = df['Time'].map(lambda x: datetime.strptime(str(x), FMT))
df['Time'] = df['Time'].map(lambda x: x.replace(day=date, month=month, year=year))
plt.gcf().autofmt_xdate()
plt.show()

但是它会生成完全相同的图表,为什么会这样呢?

1 个答案:

答案 0 :(得分:1)

好的,我设法解决了这个问题,如下所示

xformatter = mdates.DateFormatter('%H:%M')
plt.gcf().axes[0].xaxis.set_major_formatter(xformatter)

这会产生一小时:分钟

enter image description here