简介
在本实验中,我们将学习如何使用 Python 中的 Matplotlib 创建日期图。我们将使用 matplotlib.dates 模块将 datetime 对象转换为 Matplotlib 的内部表示形式。我们还将学习如何格式化 x 轴上的刻度标签,以便以可读格式显示日期。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入必要的库
我们将首先导入必要的库,包括 matplotlib.pyplot、matplotlib.cbook 和 matplotlib.dates。
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
import matplotlib.dates as mdates
加载数据
接下来,我们将加载想要绘制的数据。我们将使用来自雅虎 csv 数据的 numpy 记录数组,其字段包括日期、开盘价、最高价、最低价、收盘价、成交量、调整收盘价,数据来自 mpl-data/sample_data 目录。记录数组在日期列中将日期存储为具有日单位('D')的 np.datetime64。
data = cbook.get_sample_data('goog.npz')['price_data']
创建子图
我们将创建三个子图,以展示刻度标签的不同格式化选项。
fig, axs = plt.subplots(3, 1, figsize=(6.4, 7), layout='constrained')
绘制数据
我们将使用 plot 函数在所有三个子图上绘制数据。
for ax in axs:
ax.plot('date', 'adj_close', data=data)
ax.grid(True)
ax.set_ylabel(r'Price [\$]')
使用默认格式化器设置刻度标签格式
我们将使用默认格式化器设置第一个子图上的刻度标签格式。
ax = axs[0]
ax.set_title('DefaultFormatter', loc='left', y=0.85, x=0.02, fontsize='medium')
ax.xaxis.set_major_locator(mdates.MonthLocator(bymonth=(1, 7)))
ax.xaxis.set_minor_locator(mdates.MonthLocator())
使用简洁格式化器设置刻度标签格式
我们将使用简洁格式化器设置第二个子图上的刻度标签格式。
ax = axs[1]
ax.set_title('ConciseFormatter', loc='left', y=0.85, x=0.02, fontsize='medium')
ax.xaxis.set_major_formatter(mdates.ConciseDateFormatter(ax.xaxis.get_major_locator()))
手动设置刻度标签格式
我们将使用 DateFormatter 手动设置第三个子图上的刻度标签格式,以便使用 datetime.date.strftime 中记录的格式字符串来格式化日期。
ax = axs[2]
ax.set_title('Manual DateFormatter', loc='left', y=0.85, x=0.02, fontsize='medium')
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%b'))
for label in ax.get_xticklabels(which='major'):
label.set(rotation=30, horizontalalignment='right')
显示图表
最后,我们将使用 show 函数来显示图表。
plt.show()
总结
在本实验中,我们学习了如何使用 Python 中的 Matplotlib 创建日期图表。我们使用 matplotlib.dates 模块将 datetime 对象转换为 Matplotlib 的内部表示形式。我们还学习了如何格式化 x 轴上的刻度标签,以便以可读格式显示日期。