Matplotlib x 轴日期刻度频率

par*_*ran 2 python datetime matplotlib dataframe pandas

我有一个简单的数据框,看起来像这样(年份是日期时间索引列):

Year         A          B
2018-01-01  1.049400    1.034076    
2017-01-01  1.056371    1.032066    
2016-01-01  1.063413    1.030055 
Run Code Online (Sandbox Code Playgroud)

我使用以下方式绘制数据图表:

df['A'].plot()

df['B'].plot()

并每 5 年获取带有日期刻度标签的图表。

在此输入图像描述

如何使年份刻度每 2 年(或任何其他数量)出现一次?

Zep*_*hyr 6

检查这个代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as md

x = range(2000, 2018, 1)
year = [f'{str(y)}-01-01' for y in x]

df = pd.DataFrame({'Year': year,
                   'A': np.sin(x),
                   'B': np.cos(x)})

df['Year'] = pd.to_datetime(df['Year'], format = '%Y-%m-%d').dt.date
df.set_index('Year', inplace = True)

fig, ax = plt.subplots(1, 1, figsize = (6, 4))

df['A'].plot()
df['B'].plot()

step = 2
ax.xaxis.set_major_locator(md.YearLocator(step, month = 1, day = 1))
ax.xaxis.set_major_formatter(md.DateFormatter('%Y'))

plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

您可以使用 来管理刻度数md.YearLocator(),特别是使用step值。我报告了该方法的文档
注意 df 索引的类型:为了使代码正常工作,数据帧索引列必须是 a datetime.date,所以我使用了.dt.datepandas._libs.tslibs.timestamps.Timestamp(因为我以这种方式构建数据帧)到 的方法datetime.date。这取决于您拥有的数据类型。
一些例子:

步骤 = 2

在此输入图像描述

步骤 = 4

在此输入图像描述

步骤 = 10

在此输入图像描述