设置Pandas时间序列图的X轴主要和次要刻度和标签

设置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 的 FixedLocatorMultipleLocatorAutoLocator 等函数自定义刻度。例如,在下面的代码中,我们使用 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_xticksset_xticklabelsset_xticksset_xticklabels 函数来手动设置。例如,在下面的代码中,我们使用 set_xticksset_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 轴,使其更符合我们的需要。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Pandas 教程