更改X轴的刻度频率(时间而不是数字)

32 投票
1 回答
53285 浏览
提问于 2025-04-18 18:47

我的 python 绘图数据在 x 轴上只显示了 2 个点。

我想要更多的点,但不知道该怎么做。

x = [ datetime.datetime(1900,1,1,0,1,2),
      datetime.datetime(1900,1,1,0,1,3),
      ...
      ]                                            # ( more than 1000 elements )
y = [ 34, 33, 23, ............ ]

plt.plot( x, y )

现在 x 轴上只显示了 2 个间隔的点。我尝试使用 .xticks 来调整,但在 x 轴上没有效果。

结果出现了以下错误:

TypeError: object of type 'datetime.datetime' has no len()

1 个回答

54

不管你遇到的原因是什么,默认情况下只显示两个刻度,你可以通过更改刻度定位器来解决这个问题(自定义它),使用日期定位器。

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

x = [ datetime.datetime(1900,1,1,0,1,2),
      datetime.datetime(1900,1,1,0,1,3),
      ...
      ]                                            # ( more than 1000 elements )
y = [ 34, 33, 23, ............ ]

fig = plt.figure()
ax = fig.add_subplot(1,1,1)  
plt.plot( x, y )

ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=15))   #to get a tick every 15 minutes
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))     #optional formatting 

你有几种定位器可以选择(比如:日定位器、工作日定位器、月定位器等等),可以在文档中了解更多信息:

http://matplotlib.org/api/dates_api.html

不过,也许这个例子会更有帮助:

http://matplotlib.org/examples/api/date_demo.html

撰写回答