遇到一个项目的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官方文档
网友评论