与熊猫数据框中的日期绘制一致

时间:2019-09-11 07:56:52

标签: python pandas datetime matplotlib plot

熊猫有时决定以不同的方式绘制带有timeindex的DataFrame。

我正在使用df.plot()绘制一个熊猫时间序列DataFrame,并在不同的列上得到不同的行为,如日期如何显示以及为什么不明白。 我正在绘制6月18日的数据,因此x轴有时以非常混乱的方式显示小时06:00、08:00等,有时还显示日期/小时:06-18 06、06-18 08, ... 为什么?same df, different columns, same timeindex

2 个答案:

答案 0 :(得分:2)

让我们创建一个最小的示例。数据之间的平均间隔为5小时(5h00、10h00、15h00)。

import pandas as pd
import matplotlib.pyplot as plt

index = pd.to_datetime(["2019-09-11 05:00:00", 
                        "2019-09-11 10:00:30",
                        "2019-09-11 15:00:00"])

pd.DataFrame({"x" : [1,2,4], "y" : [3,4,4]}, index=index).plot()
plt.show()

它将导致以下情节:

enter image description here

现在,让我们将30秒添加到日期时间之一

index = pd.to_datetime(["2019-09-11 05:00:00",
                        "2019-09-11 10:00:30",  # <-- added 30 seconds here
                        "2019-09-11 15:00:00"])

现在数据不再等距分布了,结果是这样的:

enter image description here

因此,在后一种情况下,熊猫does not consider it as "ts_plot"。 “ ts”大概代表时间序列,但是无论如何,人们都可以认为两者都是时间序列。但是,当然不能对后一种情况进行重采样-这似乎是潜在的区别。
不幸的是,熊猫将格式化程序与这种时间序列联系在一起,无法手动更改。

通过将x_compat=True放入plot函数中,可以获得一致的结果。这将确保不使用独立于数据的“ ts”形轴。它将始终导致第二种情节。

df.plot(x_compat=True)

这样做的好处是,您可以通过matplotlib.dates formatters and locators手动更改那些正态图的格式。

答案 1 :(得分:0)

当一列缺少值时,似乎会发生这种情况。在左侧的图表中,所有值都存在,在右侧的图表中,上午9点至上午10点之间缺少值。