熊猫有时决定以不同的方式绘制带有timeindex的DataFrame。
我正在使用df.plot()
绘制一个熊猫时间序列DataFrame,并在不同的列上得到不同的行为,如日期如何显示以及为什么不明白。
我正在绘制6月18日的数据,因此x轴有时以非常混乱的方式显示小时06:00、08:00等,有时还显示日期/小时:06-18 06、06-18 08, ...
为什么?
答案 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()
它将导致以下情节:
现在,让我们将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"])
现在数据不再等距分布了,结果是这样的:
因此,在后一种情况下,熊猫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点之间缺少值。