x轴上带有时间戳的熊猫图-刻度单位?

时间:2018-11-17 18:08:05

标签: python pandas datetime matplotlib

我有一个带有日期时间值的熊猫数据框:

    Date/Time           Event Value
0   2018-11-15 17:17:49 62
1   2018-11-15 17:27:50 63
2   2018-11-15 17:37:50 64
3   2018-11-15 17:42:49 65
4   2018-11-15 18:17:49 64
5   2018-11-15 19:27:48 65
6   2018-11-15 19:37:48 66
7   2018-11-15 19:47:49 67
8   2018-11-15 19:57:49 68
9   2018-11-15 20:12:49 69

print (tmp.dtypes)

Date/Time      datetime64[ns]
Event Value             int64

按如下所示进行绘制:

fig, ax1 = plt.subplots(1,1,figsize=(8,4))
tmp.plot(x='Date/Time',y='Event Value', legend=None, ax=ax1)

enter image description here

x轴已使用适当的日期和时间进行了格式化(并且可以使用set_major_formatter进行进一步格式化)。

现在,我想在图表上绘制一个矩形,以突出显示特定时间。为此,我需要知道x位置。

print([x for x in ax1.get_xticks()])

[737013.7291666666, 737013.75, 737013.7708333334, 737013.7916666666, 737013.8125, 737013.8333333334]

这些确实是x值,也就是说,如果我将它们用作矩形的原点,则会按预期绘制。

rect = patches.Rectangle((737013.75,55),.01,100)
ax1.add_patch(rect)

enter image description here

我不知道这些数字从何而来。它们不是时代值,尽管看起来有点像它们(“ 737013.75”对应于“ 1970-01-09 07:43:33”,对我而言没有任何意义)。

如何从数据框中的日期/时间值获取图表上的x位置?

1 个答案:

答案 0 :(得分:1)

如果使用x_compat=True选项绘制数据框,则可以确定单位为matplotlib.dates单位。否则,大熊猫可能会为您决定一些单位。

此处,熊猫使用matplotlib日期单位。它们是defined as

  

Matplotlib使用浮点数表示日期,该浮点数指定自0001-01-01 UTC以来的天数加1。例如,0001-01-01、06:00为1.25,而不是0.25。值<1,即不支持UTC 0001-01-01之前的日期。

但是,您不希望自己计算这些单位。 Matplotlib提供辅助功能

  • matplotlib.dates.date2num
  • matplotlib.dates.num2date
  • matplotlib.dates.datestr2num

,可用于在单位之间来回计算。

例如,matplotlib.dates.datestr2num("2018-11-15 19:27:48")给您737013.8109722222