将时间绘制在独立轴上
我有一个时间戳的数组,格式是(HH:MM:SS.mmmmmm),还有一个浮点数的数组,每个浮点数对应一个时间戳。
我能不能用Matplotlib把时间放在x轴上,把数字放在y轴上呢?
我试过这样做,但好像只接受浮点数的数组。请问我该怎么做才能把时间画出来?我需要修改格式吗?
5 个回答
七年后,这段代码还是帮了我。不过,我的时间显示还是不太对。
我在使用Matplotlib 2.0.0的时候,需要加上以下这段代码,来源于编辑Matplotlib中x轴刻度标签的日期格式,作者是Paul H.
import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)
我把格式改成了(%H:%M),这样时间就正确显示了。

这一切都要感谢社区的帮助。
你也可以使用 pyplot.plot 来绘制时间戳和数值的配对图(在将它们从字符串格式解析出来之后)。这个方法在 matplotlib 版本 1.2.0 和 1.3.1 中测试过。
下面是一个例子:
import datetime
import random
import matplotlib.pyplot as plt
# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
生成的图像:
这里是同样的数据用散点图表示:
import datetime
import random
import matplotlib.pyplot as plt
# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
# plot
plt.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
产生的图像类似于这个:
更新:
这个回答已经过时了,因为从 matplotlib 3.5 版本 开始,plot
函数现在可以直接处理日期时间数据。详细信息请查看 https://matplotlib.org/3.5.1/api/_as_gen/matplotlib.pyplot.plot_date.html
不建议使用 plot_date。这个方法存在是因为历史原因,未来可能会被淘汰。
类似日期时间的数据应该直接使用 plot 来绘制。
如果你需要将普通的数字数据以 Matplotlib 日期格式绘制,或者需要设置时区,可以在绘图之前调用 ax.xaxis.axis_date / ax.yaxis.axis_date。请参见 Axis.axis_date。
旧的、过时的回答:
你首先需要将时间戳转换为 Python 的 datetime
对象(使用 datetime.strptime
)。然后使用 date2num
将日期转换为 matplotlib 格式。
使用 plot_date
绘制日期和数值:
import matplotlib.pyplot as plt
import matplotlib.dates
from datetime import datetime
x_values = [datetime(2021, 11, 18, 12), datetime(2021, 11, 18, 14), datetime(2021, 11, 18, 16)]
y_values = [1.0, 3.0, 2.0]
dates = matplotlib.dates.date2num(x_values)
plt.plot_date(dates, y_values)