使用循环规则自定义 Matplotlib 日期刻度

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何在 Matplotlib 中使用循环规则来设置日期刻度。iCalender RFC_ 规定了定义日期序列的循环规则(rrules)。你可以在 Matplotlib 中使用 rrules 来设置日期刻度。本示例在每隔 5 年的复活节设置自定义日期刻度。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入必要的库

首先,你需要导入必要的库,包括 Matplotlib、NumPy 和 datetime。

import datetime
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.dates import (YEARLY, DateFormatter, RRuleLocator, drange,
                              rrulewrapper)

设置随机种子

在本示例中你将生成随机数据,因此需要设置随机种子以确保可重复性。

np.random.seed(19680801)

设置循环规则

你将在每隔 5 年的复活节设置自定义日期刻度。为此,你需要使用 rrulewrapper 函数设置循环规则。

rule = rrulewrapper(YEARLY, byeaster=1, interval=5)

设置刻度定位器和格式化器

你将使用 RRuleLocator 函数,根据上一步设置的循环规则来设置刻度定位器。你还将使用 DateFormatter 函数来设置刻度格式化器。

loc = RRuleLocator(rule)
formatter = DateFormatter('%m/%d/%y')

设置日期并生成随机数据

你需要设置开始日期、结束日期以及时间间隔(delta),时间间隔表示每个日期之间的差值。你还需要为该示例生成随机数据。

date1 = datetime.date(1952, 1, 1)
date2 = datetime.date(2004, 4, 12)
delta = datetime.timedelta(days=100)

dates = drange(date1, date2, delta)
s = np.random.rand(len(dates))

绘制数据并设置 x 轴刻度

最后,你可以使用 plot 函数绘制数据,并使用之前设置的刻度定位器和格式化器函数来设置 x 轴刻度。

fig, ax = plt.subplots()
plt.plot(dates, s, 'o')
ax.xaxis.set_major_locator(loc)
ax.xaxis.set_major_formatter(formatter)
ax.xaxis.set_tick_params(rotation=30, labelsize=10)
plt.show()

总结

在本实验中,你学习了如何在 Matplotlib 中使用循环规则在图表上放置自定义日期刻度。你首先使用 rrulewrapper 函数设置循环规则,然后使用 RRuleLocatorDateFormatter 函数设置刻度定位器和格式化器。最后,你绘制了数据,并使用刻度定位器和格式化器函数设置了 x 轴刻度。