gpt4 book ai didi

python - Matplotlib x 轴标签对齐关闭

转载 作者:太空宇宙 更新时间:2023-11-03 18:52:01 25 4
gpt4 key购买 nike

我正在尝试绘制一个以日期为 x 轴的图表。该图很好,但刻度线与数据点不对齐。

from datetime import datetime
import pylab as p
from matplotlib.dates import date2num, num2date

scores = [
(datetime.strptime("2013-08-07T14:00", "%Y-%m-%dT%H:%M"), 1280),
(datetime.strptime("2013-08-07T15:00", "%Y-%m-%dT%H:%M"), 1272),
(datetime.strptime("2013-08-07T16:00", "%Y-%m-%dT%H:%M"), 1252),
(datetime.strptime("2013-08-07T17:00", "%Y-%m-%dT%H:%M"), 1293),
(datetime.strptime("2013-08-07T18:00", "%Y-%m-%dT%H:%M"), 1258),
(datetime.strptime("2013-08-07T19:00", "%Y-%m-%dT%H:%M"), 1240),
(datetime.strptime("2013-08-07T20:00", "%Y-%m-%dT%H:%M"), 1287),
(datetime.strptime("2013-08-07T21:00", "%Y-%m-%dT%H:%M"), 1241),
(datetime.strptime("2013-08-07T22:00", "%Y-%m-%dT%H:%M"), 1286),
(datetime.strptime("2013-08-07T23:00", "%Y-%m-%dT%H:%M"), 1237),
(datetime.strptime("2013-08-08T00:00", "%Y-%m-%dT%H:%M"), 1269),
(datetime.strptime("2013-08-08T01:00", "%Y-%m-%dT%H:%M"), 1269),
(datetime.strptime("2013-08-08T02:00", "%Y-%m-%dT%H:%M"), 1258),
(datetime.strptime("2013-08-08T03:00", "%Y-%m-%dT%H:%M"), 1259),
(datetime.strptime("2013-08-08T04:00", "%Y-%m-%dT%H:%M"), 1265),
(datetime.strptime("2013-08-08T05:00", "%Y-%m-%dT%H:%M"), 1225),
(datetime.strptime("2013-08-08T06:00", "%Y-%m-%dT%H:%M"), 1251),
(datetime.strptime("2013-08-08T07:00", "%Y-%m-%dT%H:%M"), 1297),
(datetime.strptime("2013-08-08T08:00", "%Y-%m-%dT%H:%M"), 1244),
(datetime.strptime("2013-08-08T09:00", "%Y-%m-%dT%H:%M"), 1283),
(datetime.strptime("2013-08-08T10:00", "%Y-%m-%dT%H:%M"), 1253),
(datetime.strptime("2013-08-08T11:00", "%Y-%m-%dT%H:%M"), 1305),
(datetime.strptime("2013-08-08T12:00", "%Y-%m-%dT%H:%M"), 1284),
(datetime.strptime("2013-08-08T13:00", "%Y-%m-%dT%H:%M"), 1318),
(datetime.strptime("2013-08-08T14:00", "%Y-%m-%dT%H:%M"), 454),
]

if __name__ == "__main__":
fig = p.figure()
ax = fig.add_subplot(1,1,1)
x = [date2num(date) for (date, value) in scores]
y = [value for (date, value) in scores]
ax.plot(x, y, 'r-x')
ticks = [num2date(t) for t in x[0::4]]
ax.set_xticklabels([t.strftime("%H:%M") for t in ticks], rotation="45")
p.savefig("line_plot.png")

这将产生以下图表作为其输出。

Sample output

第一个数据点应该从 14:00 开始,看起来已经过去了 3 个小时。数据点之间的间距似乎是正确的,只是起始偏移量关闭了。知道为什么这样做吗?

更新:根据似乎已删除的评论,我查看了 plot_date 方法,我设法以某种方式错过了......我现在已将代码更改为以下内容。这给了我一个很好的图表,其中刻度位于正确的位置。

if __name__ == "__main__":
fig = p.figure()
ax = fig.add_subplot(1,1,1)
x = [date2num(date) for (date, value) in scores]
y = [value for (date, value) in scores]
ax.plot_date(x, y, 'r-x')
fig.autofmt_xdate()
p.savefig("line_plot.png")

最佳答案

您已将 x 数据转换为一系列可以被 python 的 datetime 理解的 float 。模块,但是当将它们传递到 p.plot(x, y) 时它只看到一堆漂浮物。那么您实际上是在任意设置标签。

您应该使用ax.plot_date(x, y, 'r-x')它接受 x 作为日期或浮点表示。您需要删除 x 标签的手动设置才能看到这一点。然后参阅文档了解如何自定义 x 轴格式。

关于python - Matplotlib x 轴标签对齐关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18130003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com