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

时间:2018-01-16 02:02:39

标签: python pandas matplotlib plot time-series

我创建了一个Pandas Dataframe,并使用pd.to_datetime函数将'date'列转换为时间序列对象。我试图在Python和Excel中绘制相关图,以查看时间戳是否正确映射。

第一个图是一个带有时间映射点的Excel图。 我试图用Python复制它 - 只有'观察',该图反映了Excel Plot。然而,只要我添加“日期”,情节就变成了意大利面条。

我似乎无法弄清楚为什么会这样 - 有人可以提出建议吗?

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

CNN006['Date'] = pd.to_datetime(CNN006['Date'])

这正确地将日期转换为时间戳(图片4)

请参阅附件: Excel TS Plot

Python Plot with no dates

Python Plot with dates

Date Conversion Successful

csv文件的链接在这里: https://drive.google.com/open?id=1kctGhXafHYXxC1rSFvdwgvmvLAo2RLsZ

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

from matplotlib.dates import DateFormatter
fig, ax = plt.subplots()
plt.xticks(rotation=90)
myFmt = DateFormatter("%Y-%m-%d")
ax.xaxis.set_major_formatter(myFmt)

修改 这是分别为图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)

* Plot 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)混淆。 Solution_for_Plot

1 个答案:

答案 0 :(得分:1)

我认为您的问题与数据的日期格式有关。如果您为import a from "../../a.js"; ... 提供格式字符串,则应该全部设置。

to_datetime()

enter image description here