前面学习了X轴日期显示的第一个例子,这里继续来学习第二个例子,这样才可以与前面的知识形成对比,形成增量的变化,才能更加深刻体会到代码的作用,函数的功能,熟练地运用日期显示的知识。
接着下来实现的结果如下图:
在这里,X轴还是显示日期,但是改了一种格式,年份采用四位方式,由于它采用%Y的设置,而前一个例子采用小写的y,这是python日期的格式。与前面不一样的地方,比如每一个大格里,有四个小格,每个小格是6个小时一格。因此相对于前面的代码,作了下面的修改:
host.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
这行设置主刻度上日期显示的方式。
host.xaxis.set_minor_locator(mdates.HourLocator(range(0, 25, 6)))
这行设置次刻度的数量,这里按小时设置,range(0, 25, 6)生成一个4格刻度的列表。如果想生成2小时一小格,那么就需要修改为range(0, 25, 2);如果想改为12小时一小格,修改为range(0, 25, 12)。
host.tick_params(axis = "both", direction = "out", labelsize = 10)
这行代码与前面的例子是一样的,没有做任何的修改。还是让坐标轴的刻度线朝向外面,以及坐标显示的字体大小设置为10。
date1 = datetime.date(2020, 12, 1)
date2 = datetime.date(2020, 12, 6)
delta = datetime.timedelta(hours=6)
dates = mdates.drange(date1, date2, delta)
print(dates)
这段代码,就是生成日期的数据集。如果你的数据是现成的,只要转换为浮点格式,就可以了,不需要像这样产生。
host.set_xlim(dates[0], dates[-1])
这行代码是设置X轴坐标的起始和终止刻度,这里是把时间第一个值设置为坐标轴原点位置,最后一个日期为X轴坐标轴的结束位置。这样做的目的就是为了X轴坐标全部显示相关的数据,没有一点多余的位置显示其它不相关的数据。
y = np.arange(len(dates))
host.plot_date(dates, y**2, 'b-', alpha = 0.7)
第一行代码是生成一个曲线y的序列,然后第二行代码画出时间与y平方的曲线,透明度还是采用0.7。
通过上面的例子,可以发现host.xaxis.set_major_formatter()函数是控制主刻度显示日期的格式,host.xaxis.set_minor_locator()是控制次刻度的间隔个数,也就是表示每一小格的精度,也是物理上的分辨率,一个尺子的刻度是不能随便设置的,因为不同的工具,它的测试精度不一样。
整个例子的代码如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
#
fig, host = plt.subplots() #创建子图
host.grid(False)
#
host.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
host.xaxis.set_minor_locator(mdates.HourLocator(range(0, 25, 6)))
host.tick_params(axis = "both", direction = "out", labelsize = 10)
date1 = datetime.date(2020, 12, 1)
date2 = datetime.date(2020, 12, 6)
delta = datetime.timedelta(hours=6)
dates = mdates.drange(date1, date2, delta)
print(dates)
host.set_xlim(dates[0], dates[-1])
y = np.arange(len(dates))
host.plot_date(dates, y**2, 'b-', alpha = 0.7)
fig.autofmt_xdate()
plt.tight_layout()
plt.show()