Python 如何在matplotlib中的一个图形上绘制包含不同日期但时间戳相同的时间序列

Python 如何在matplotlib中的一个图形上绘制包含不同日期但时间戳相同的时间序列,python,datetime,graph,matplotlib,plot,Python,Datetime,Graph,Matplotlib,Plot,我有数据显示在三个不同日期收集的一些值:2015-01-08、2015-01-09和2015-01-12。对于每个日期,都有几个具有时间戳的数据点 日期/时间在列表中,如下所示: ['2015-01-08-09:00:00', '2015-01-08-10:00:00', '2015-01-08-11:00:00', '2015-01-08-12:00:00', '2015-01-08-13:00:00', '2015-01-09-14:00:00', '2015-01-09-15:00:00'

我有数据显示在三个不同日期收集的一些值:2015-01-08、2015-01-09和2015-01-12。对于每个日期,都有几个具有时间戳的数据点

日期/时间在列表中,如下所示:

['2015-01-08-09:00:00', '2015-01-08-10:00:00', '2015-01-08-11:00:00', '2015-01-08-12:00:00', '2015-01-08-13:00:00', '2015-01-09-14:00:00', '2015-01-09-15:00:00', '2015-01-09-16:00:00', '2015-01-12-09:00:00', '2015-01-12-10:00:00', '2015-01-12-11:00:00']
另一方面,我在另一个列表中有相应的值(浮动):

[12210.0, 12210.0, 12180.0, 12240.0, 12250.0, 12420.0, 12390.0, 12400.0, 12380.0, 12450.0, 12460.0]
要将所有这些放在一起并绘制一个图表,我使用以下代码:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.dates as md
import dateutil
from matplotlib.font_manager import FontProperties

timestamps = ['2015-01-08-09:00:00', '2015-01-08-10:00:00', '2015-01-08-11:00:00', '2015-01-08-12:00:00', '2015-01-08-13:00:00', '2015-01-09-14:00:00', '2015-01-09-15:00:00', '2015-01-09-16:00:00', '2015-01-12-09:00:00', '2015-01-12-10:00:00', '2015-01-12-11:00:00']

ticks = [12210.0, 12210.0, 12180.0, 12240.0, 12250.0, 12420.0, 12390.0, 12400.0, 12380.0, 12450.0, 12460.0]

plt.subplots_adjust(bottom=0.2)
plt.xticks( rotation=90 )

dates = [dateutil.parser.parse(s) for s in timestamps]

ax=plt.gca()
ax.set_xticks(dates)
ax.tick_params(axis='x', labelsize=8)

xfmt = md.DateFormatter('%H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)

plt.plot(dates, ticks, label="Price")

plt.xlabel("Date and time", fontsize=12)
plt.ylabel("Price", fontsize=12)
plt.suptitle("Price during last three days", fontsize=12)

plt.legend(loc=0,prop={'size':8})

plt.savefig("figure.pdf")
当我试图绘制这些日期时间和值时,我得到了一个混乱的图形,其中的线来回移动

看起来日期被忽略了,只考虑了时间戳,这就是造成图表混乱的原因。我试图编辑datetimes,使其具有相同的日期和连续的时间戳,它修复了图表。但是,我也必须有约会

我做错了什么

当我试图绘制这些日期时间和值时,我得到了一个混乱的图形,其中的线来回移动

您的绘图到处都是,因为
plt.plot
按您给出的顺序连接点。如果这个顺序在x中不是单调递增的,那么它看起来“混乱”。可以先按x对点进行排序,以解决此问题。下面是一个简单的例子:

import numpy as np
import pylab as plt

X = np.random.random(20)
Y = 2*X+np.random.random(20)

idx = np.argsort(X)
X2 = X[idx]
Y2 = Y[idx]

fig,ax = plt.subplots(2,1)
ax[0].plot(X,Y)
ax[1].plot(X2,Y2)
plt.show()

嗨,阿卡,欢迎来到Stack Overflow!我删除了你的长篇介绍,如果你愿意,你可以将其作为评论转载,但这不是问题的关键。我们尽量只保留问题中重要的部分,以便其他人在以后找到它时可以直接找到好东西!谢谢你的快速回复!问题是,如果我用1,2,3,4替换我的“时间戳”列表中的元素。。。然后一切都会好起来的。这让我得出结论,python忽略了日期,只关注时间。因此,它绘制了09:00,10:00。。1月8日等一次,然后又回到09:00,10:00。。等1月9日在X轴的同一点。@Aka当我绘制您提供的数据时,因此我试图回答上述问题。我不明白你在说什么。你能编辑你的问题,以提供一个图片的最低限度的例子吗?我知道你还不能发布,把一个imgur链接放上去,我们可以为你编辑它。我想做的是连续绘制1月8日09:00,1月8日10:00。。。等一月九日09:00,一月九日10:00。。。1月12日09:00、1月12日10:00等,在x轴上,无需按日期分解图表。是否可以进行绘图,以便同时考虑日期和时间?这是因为
datetime
对象之间有顺序关系。您是否尝试过使用我提供的示例对“日期”进行排序?还没有机会。但是如果你能在最初的帖子中看到,这个列表已经很好地排序了,我不知道为什么它需要额外的排序。python不是从index=0项开始获取元素吗?