使用 Pandas 系列日期(字符串)作为绘图上的 x 刻度

Using Pandas Series of dates(strings) as x ticks on a plot

我有 3 个带有股票数据的 csv,全部从 2012-01-1 到 2017-01-01。我已经使用 Pandas 从它们中制作数据帧,并被指示将它们变成这个示例图: [期望的结果][1]

我唯一的问题是 Pandas 没有像图片中那样从我的 Dataframe 中获取 'Date' 系列来创建时间的 X 轴,而是我得到一个值为 0 的 X 轴-1400 [我失败的情节][2](我有 1258 个日期,所以它获取的是日期索引而不是日期本身)。

这是我现在的情节代码:

ford['Open'].plot()
tesla['Open'].plot()
GM['Open'].plot(x=ford['Date'],figsize=(16,8),title='Open price',xlabel='Date')
plt.legend(['Ford','Tesla','GM'])

我尝试使用 xticks 参数并将其传递给 tesla['Date'](日期系列的名称),但是当我这样做时出现此错误:

ConversionError: Failed to convert value(s) to axis units: 0 2012-01-03 1 2012-01-04 2 2012-01-05 3 2012-01-06 4 2012-01-09 ...
1253 2016-12-23 1254 2016-12-27 1255 2016-12-28 1256 2016-12-29 1257 2016-12-30 Name: Date, Length: 1258, dtype: object

我在 google 上找不到这个特定的问题,我已经找了一个小时了。我肯定错过了什么,但我不知道是什么。谢谢你的帮助 [1]: https://i.stack.imgur.com/bz8GU.png [2]: https://i.stack.imgur.com/lSihy.png

Select 要显示的日期的索引(例如,每 200 个值一个勾号),并使用 plt.xticks。试试这个:

import numpy as np

ford['Open'].plot()
tesla['Open'].plot()
GM['Open'].plot()
plt.legend(['Ford','Tesla','GM'])
ticks = np.arange(0, len(ford['Date']), 200)
plt.xticks(ticks, ford['Date'][ticks])

使用 pandas 图,您可以通过堆叠每个图来创建图表,而无需指定 x-axis。数据取自雅虎财经,单位one-month。

import matplotlib.pyplot as plt

fig = plt.figure()
ford['Open'].plot()
tesla['Open'].plot()
GM['Open'].plot(figsize=(16,8),title='Open price',xlabel='Date')
plt.legend(['Ford','Tesla','GM'])
plt.show()