设置Pandas时间序列图的X轴主要和次要刻度和标签
Pandas 是 Python 中非常受欢迎的数据分析工具,其时间序列图绘制功能十分强大。在绘制时间序列图时,X 轴上的刻度和标签尤为重要,它们可以参考时间轴上的事件,为观察者提供更多的信息。
本文将介绍如何设置 Pandas 时间序列图的 X 轴主要和次要刻度和标签。我们将使用 Jupyter Notebook 进行演示,涉及的Pandas 版本是 1.3.3。
更多Pandas相关文章,请阅读:Pandas 教程
准备数据
首先,让我们准备一个简单的时间序列数据集。
import pandas as pd
import matplotlib.pyplot as plt
# 创建日期索引
date_index = pd.date_range(start="2022-01-01", end="2022-12-31", freq="D")
# 创建数据
data = [i**2 for i in range(len(date_index))]
# 创建 DataFrame
df = pd.DataFrame(data, index=date_index, columns=["value"])
运行上面的代码后,我们就有了一个名为 df
的 Pandas DataFrame 对象,其中包含一个名为 value
的列和时间戳索引。
绘制图表
接下来,我们将使用 Pandas 的 plot
函数绘制 DataFrame 中的数据。
# 绘制折线图
df.plot()
plt.show()
运行上面的代码后,我们会看到一个简单的折线图,其中 X 轴是时间轴。
设置 X 轴主要刻度和标签
默认情况下,Pandas 会为时间轴设置主要刻度和标签。但有时我们希望自己定制它们,Pandas 提供了一些函数来帮助我们处理这些内容。例如,我们可以使用 dates
函数为 X 轴设置刻度和标签。在下面的代码中,我们将 dates
函数的参数设置为考虑每个月的第一个工作日,这将导致 X 轴上的标签只显示出一个月的第一天。
# 绘制折线图(使用 dates 函数)
df.plot(x_compat=True)
plt.gca().xaxis.set_major_locator(pd.tseries.offsets.MonthBegin())
plt.show()
运行上面的代码后,我们会看到 X 轴上的刻度和标签只显示了每个月的第一天。
设置 X 轴次要刻度和标签
默认情况下,Pandas 不会为 X 轴生成次要刻度和标签。但我们可以使用 Matplotlib 的 FixedLocator
、MultipleLocator
和 AutoLocator
等函数自定义刻度。例如,在下面的代码中,我们使用 MultipleLocator
函数为 X 轴生成次要刻度,并使用 set_minor_formatter
函数设置次要标签的格式。
# 绘制折线图(使用 dates 函数和次要刻度)
df.plot(x_compat=True)
plt.gca().xaxis.set_major_locator(pd.tseries.offsets.MonthBegin())
plt.gca().xaxis.set_minor_locator(plt.MultipleLocator(6))
# 设置次要标签格式
plt.gca().xaxis.set_minor_formatter(plt.FuncFormatter(lambda x, y: (x+pd.Timedelta(days=3)) if x.day == 1 else ""))
plt.show()
运行上面的代码后,我们会看到 X 轴上有次要刻度和标签,次要刻度距离主要刻度的间隔是 6 天。
设置 X 轴次要刻度和标签(另一种方法)
还有一种更简单的方法可以为 X 轴设置次要刻度和标签,我们可以直接使用 set_xticks
、set_xticklabels
、set_xticks
、set_xticklabels
函数来手动设置。例如,在下面的代码中,我们使用 set_xticks
和 set_xticklabels
函数来为 X 轴设置刻度和标签。其中,np.arange
函数用于生成一组等间隔的刻度,strftime
方法用于将日期对象转换为字符串,以便在 X 轴上显示出来。
import numpy as np
# 绘制折线图(手动添加刻度和标签)
df.plot()
plt.xticks(np.arange(df.index.min().value, df.index.max().value, np.timedelta64(30, 'D')),
df.index.strftime('%Y-%m-%d')[::30],
rotation=45)
plt.show()
运行上面的代码后,我们会看到 X 轴上的标签显示了每个月的第一天,刻度间隔为 30 天。
结论
在本文中,我们介绍了如何设置 Pandas 时间序列图的 X 轴主要和次要刻度和标签。通过本文所示的方法,我们可以轻松地定制时间序列图的 X 轴,使其更符合我们的需要。