使用 Matplotlib 在 Python 中绘制时间

新手上路,请多包涵

我有一个格式为 (HH:MM:SS.mmmmmm) 的时间戳数组和另一个浮点数数组,每个数组对应于时间戳数组中的一个值。

我可以使用 Matplotlib 在 x 轴上绘制时间,在 y 轴上绘制数字吗?

我正在尝试,但不知何故它只接受浮点数数组。我怎样才能让它绘制时间?我必须以任何方式修改格式吗?

原文由 randomThought 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 296
2 个回答

更新

自 matplotlib version 3.5 以来, 此答案已过时。 plot 函数现在直接处理日期时间数据。请参见 https://matplotlib.org/3.5.1/api/_as_gen/matplotlib.pyplot.plot_date.html

不鼓励使用 plot_date。这种方法的存在是出于历史原因,将来可能会被弃用。

datetime-like 数据应该直接使用 plot.

如果您需要将纯数字数据绘制为 Matplotlib 日期格式或需要设置时区,请在绘制前调用 ax.xaxis.axis_date / ax.yaxis.axis_date。请参见 Axis.axis_date。


旧的,过时的答案:

您必须首先将时间戳转换为 Python datetime 对象(使用 datetime.strptime )。然后使用 date2num 将日期转换为 matplotlib 格式。

使用 plot_date 绘制日期和值:

 import matplotlib.pyplot
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)
matplotlib.pyplot.plot_date(dates, y_values)

在此处输入图像描述

原文由 codeape 发布,翻译遵循 CC BY-SA 4.0 许可协议

您还可以使用 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()

生成类似于此的图像:

散点图

原文由 moooeeeep 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题