记matplotlib的x时间轴绘图

2020-04-28  本文已影响0人  dc的梦呓

遇到一个项目的matplotlib的绘图需求,其中的x时间轴花了好些时间才完成,记录一下。

需求:
7天的数据,一天24个,每个1时;
x 时间轴只显示小时:0、12时;
当0时,需显示在其下方显示日期;

以下为实现示例代码:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
from datetime import timedelta
from random import randrange

ax = plt.gca()  #当前画布
#构造测试数据
dt_start = datetime.datetime(2008,1,1,1)
x_datetimes = [dt_start+timedelte(hours=i) for i in range(0,169)]
y_values = [randrange(20) for i in range(0,169)]
#若不设置时间轴,直接绘制显示:
ax.plot(x_datetimes,y_values)
plt.show()

若不设置时间轴直接显示,matplotlib 会有默认的显示方式(根据数据),只显示日期,还会重叠在一起,效果不好,因此需根据需求定制x轴的显示格式。


image.png

以下为设置代码:

ax = plt.gca()
#设置时间轴显示格式
hour_locator = mdates.HourLocator((0,12,))  #只显示0、12时
ax.xaxis.set_major_locator(hour_locator)
formatter = mdates.ConciseDateFormatter(hour_locator,show_offset=False) #显示格式
formatter.formats[3]='%H'
formatter.zero_formats = ['']+formatter.formats[:-1]
#0时,分行显示日期
formatter.zero_formats[3] = '%H\n%m/%d'  
ax.xaxis.set_major_formatter(formatter)
#绘制
ax.plot(x_datetimes,y_values)
plt.show()

效果图如下:


image.png

更多详细用法可参考matplotlib官方文档

上一篇 下一篇

猜你喜欢

热点阅读