如何绘制时间序列图?

20

我有一个包含日期在第一列和“结果”整数(要么是1要么是0)的数据集。日期列已经成功转换为时间对象。我尝试使用matplotlib的plot函数直接绘制值,但这并没有起作用。

    Date       Result
2017-01-06     0.0
2017-01-06     1.0
2017-01-06     0.0
2017-01-07     0.0
2017-01-07     0.0

我尝试使用df.plot(),但是生成的图表效果非常不理想。

最终我想要的是日期显示在x轴上,"result"显示在y轴上。我做错了什么?我做的有什么问题吗?

这是图表


2
请展示你的代码,否则我们怎么知道你可能在哪里出错了呢? - Bill Bell
我所做的就是使用这个新创建的数据框,然后简单地使用df.plot()函数,生成的图表在X轴上没有日期,只有0到2000的范围。 - RedaBitar
你有一个名为df的东西,这表明你在使用pandas。此外,你只有两个不同的日期。我想知道你期望得到什么样的图形,以及你具体做了什么。 - Bill Bell
我使用了pandas,数据框是一个简单的2列数据框,日期列和结果列,值为0或1。我想按时间绘制每个时间戳的值。 - RedaBitar
1
尝试使用df.set_index('Date').plot()或者df.plot(x='Date', y='Result')。我猜测这是因为plot函数默认使用df的索引作为x轴。所以针对您的df,它会默认使用0->2000。因此,请将'Date'列设置为索引并重试。 - heyu91
那个数据框看起来完全是这样的吗?你把日期列格式化成日期了吗? - Andrew L
2个回答

46
请使用以下代码之一:

df.set_index('Date').plot()

df.plot(x='Date', y='Result')

因为默认情况下绘图使用df的索引作为x轴,所以您应该将“Date”列设置为索引,或指定要用作x轴的列。
请参见pandas.DataFrame.plot了解更多信息。

谢谢。我已经在解决这个问题上花费了很长时间,而这是我看到的第一个直接切入问题核心的答案。现在我知道matplotlib在x轴上绘制索引,这就很合理了。干杯! - DaveL17

0
一个常见的问题是,Date列看起来像datetime64,但实际上是object。因此,更改数据类型可以解决这个问题。请注意,传递日期时间format=可以使转换运行得更快(有关更多信息,请参见this answer)。
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')
df.plot(x='Date', y='Result', kind='scatter', rot=90)

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