Matplotlib 日期绘图

PythonPythonBeginner
立即练习

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

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

简介

在本实验中,我们将学习如何使用 Python 中的 Matplotlib 创建日期图。我们将使用 matplotlib.dates 模块将 datetime 对象转换为 Matplotlib 的内部表示形式。我们还将学习如何格式化 x 轴上的刻度标签,以便以可读格式显示日期。

虚拟机使用提示

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

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

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

导入必要的库

我们将首先导入必要的库,包括 matplotlib.pyplotmatplotlib.cbookmatplotlib.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轴上的刻度标签,以便以可读格式显示日期。