如何将pandas时间序列图中的xticks更改为每年间隔

Pou*_*del 3 python time-series matplotlib dataframe pandas

我对 pandas 很陌生,我搜索了许多与每年更改 xtick 标签类似的 StackOverflow 问题,但它们都不同并没有解决我的问题,所以我决定问我自己的问题。

这是我的问题。我有一个模拟数据框,我想在 x 轴上绘制每年的 xticks 。

import numpy as np
import pandas as pd

df = pd.DataFrame({'date': pd.date_range('1991-01-01','2019-01-01')}).set_index('date')
df['value'] = np.random.randn(len(df))
df.plot()

Run Code Online (Sandbox Code Playgroud)

这给出: Xticks ==> 1995 2000 2005 等但我想要 ==> 1991 1992 ... 2019

怎么做?

到目前为止我已经尝试过这个:

import matplotlib
import matplotlib
import matplotlib.pyplot as plt

%matplotlib inline

fig,ax = plt.subplots()
df.plot(ax=ax)

ax.xaxis.set_major_locator(matplotlib.dates.YearLocator(base=1))
# ax.xaxis.set_minor_locator(matplotlib.dates.YearLocator(base=1))

# ax.set_xticklabels(list(df.index.time))

Run Code Online (Sandbox Code Playgroud)

这仅给出了 2005 作为 xtick,并且到目前为止没有任何效果。

我查看的链接: -更改 pandas 图中的 xticks - Python:更改 Pandas 图中 xticks 的时间 - https://matplotlib.org/3.1.1/api/dates_api.html

Imp*_*est 7

您需要使用x_compat=True参数让 pandas 以与 matplotlib.dates 定位器和格式化程序兼容的方式选择单位。

df.plot(ax=ax, x_compat=True)
Run Code Online (Sandbox Code Playgroud)

完整代码:

import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)
df = pd.DataFrame({'date': pd.date_range('1991-01-01','2019-01-01')}).set_index('date')
df['value'] = np.random.randn(len(df))


fig,ax = plt.subplots()
df.plot(ax=ax, x_compat=True)

ax.xaxis.set_major_locator(matplotlib.dates.YearLocator(base=1))
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("%Y"))

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

在此输入图像描述

  • 只是花了大约一个小时寻找为什么我在用 pandas 绘图后无法正确设置 xtick 间隔的原因。事实证明,一个简单的“x_compat = True”就解决了这个问题。非常感谢。 (3认同)