时间序列Python绘图(轴不匹配)

时间序列Python绘图(轴不匹配),python,pandas,matplotlib,plot,time-series,Python,Pandas,Matplotlib,Plot,Time Series,我已经创建了一个Pandas数据框,并使用pd.to_datetime函数将“date”列转换为一个时间序列对象。我尝试用Python和Excel绘制相关的绘图,以查看时间戳是否正确映射 第一个曲线图是Excel曲线图,其时间对应于各点。 我曾尝试在Python中复制这一点——仅通过“观察”,绘图就反映了Excel绘图。然而,只要我加上“日期”,情节就变成了一个意大利面情节 我似乎不明白为什么会这样——有人能提供建议吗 我在日期字段中使用了以下行: CNN006['Date'] = pd.to_

我已经创建了一个Pandas数据框,并使用pd.to_datetime函数将“date”列转换为一个时间序列对象。我尝试用Python和Excel绘制相关的绘图,以查看时间戳是否正确映射

第一个曲线图是Excel曲线图,其时间对应于各点。 我曾尝试在Python中复制这一点——仅通过“观察”,绘图就反映了Excel绘图。然而,只要我加上“日期”,情节就变成了一个意大利面情节

我似乎不明白为什么会这样——有人能提供建议吗

我在日期字段中使用了以下行:

CNN006['Date'] = pd.to_datetime(CNN006['Date'])
这将日期正确地转换为时间戳(图4)

请参阅附件:

csv文件的链接如下:

编辑-我尝试了另一种方法,即修改xtick,但结果好坏参半,没有给我想要的东西

编辑 这分别是图2和图3的代码 **情节2

fig, ax = plt.subplots()
plt.xticks(rotation=45)
xfmt = mdates.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
ax.grid()
plt.xticks(rotation=90)
ax.plot(CNN006.Date,CNN006.DailyAvgGasFlowRate)
ax.plot(CNN006.Date,CNN006.DailyAvgWaterRate)
ax.plot(CNN006.Date, CNN006.DailyAvgTorque)
*情节3

fig, ax = plt.subplots()
plt.xticks(rotation=45)
xfmt = mdates.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
ax.grid()
plt.xticks(rotation=90)
ax.plot(CNN006.DailyAvgGasFlowRate)
ax.plot(CNN006.DailyAvgWaterRate)
ax.plot(CNN006.DailyAvgTorque)
解决方案

CNN006['Date'] = pd.to_datetime(CNN006['Date'], format='%d-%m-%Y %H:%M:%S')
ax = CNN006.set_index('Date').plot()
xfmt = mdates.DateFormatter('%d-%m-%Y %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.xticks(rotation=90)
我之前假设使用.to_date功能,它会自动将日期字符串转换为适当的时间序列,而无需显式地传递格式。现在我意识到情况并非如此,我们必须在.to_date函数中指定格式,以便MatPlotLib不会与不匹配用户指定的“日期”操作(即我的代码中的xmft)的传入日期混淆。
我认为您的问题与数据的日期格式有关。如果您向
提供了一个格式字符串,将其设置为\u datetime()

df = pd.read_csv('MatplotLibTSManipulation.csv')
df.Date = pd.to_datetime(df.Date, format='%d-%m-%Y %H:%M:%S')
ax = df.set_index('Date').plot()

您可以发布用于绘制图2和图3的代码吗?@ThomasKühn-我已经用我的代码更新了问题。谢谢。由于没有为
to_datetime()
提供格式字符串,因此日期分析器对格式进行了假设。具体来说,它尝试了“MM/DD/YYYY”,如果失败,它尝试了“DD/MM/YYYY”。因此,结果数据帧中的前三行的日期为“2016年11月1日;2016年12月1日;2016年1月13日”。Matplotlib按照数据帧的顺序绘制这些数据点,并连接这些线(因此第三个数据点似乎在时间上向后跳,因此出现了“意大利面”)。调用Matplotlib的
set_major_formatter
仅控制日期在xaxis上的打印方式,这是正确的。感谢您的建议。我在你提供的基础上更新了我的答案。我希望在pandas中解析数据的方式会自动应用指定的数据格式,但事实并非如此。我们必须手动指定格式类型,它才能工作。
df = pd.read_csv('MatplotLibTSManipulation.csv')
df.Date = pd.to_datetime(df.Date, format='%d-%m-%Y %H:%M:%S')
ax = df.set_index('Date').plot()