如何使用“set_major_locator”将 x-ticks 设置为月份?

May*_*ybe 6 python matplotlib

我尝试使用以下代码将其设置x-ticks为 [一月,二月,...]

import matplotlib.pyplot as plt
from matplotlib.dates import MonthLocator, DateFormatter
fig = plt.figure(figsize=[10, 5])
ax = fig.add_subplot(111)
ax.plot(np.arange(1000))
ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_major_formatter(DateFormatter('%b'))
Run Code Online (Sandbox Code Playgroud)

我得到下图,没有 x 刻度 在此输入图像描述

我想知道为什么所有 x-ticks 都消失了?我参考这个实现写了上面的代码

非常感谢。

cal*_*ini 4

目前还不清楚您当前拥有的数据类型。但以下是我在 x 轴上绘制月份的建议:

  1. 使用转换您的日期pd.to_datetime
  2. 将其设置为您的数据帧索引。
  3. 显式调用该plt.set_xticks()方法

下面是重新创建数据的一个示例:

from datetime import datetime as dt
from datetime import timedelta

### create sample data
your_df = pd.DataFrame()
your_df['vals'] = np.arange(1000)

## make sure your datetime is considered as such by pandas
your_df['date'] = pd.to_datetime([dt.today()+timedelta(days=x) for x in range(1000)])
your_df=  your_df.set_index('date') ## set it as index

### plot it
fig = plt.figure(figsize=[10, 5])
ax = fig.add_subplot(111)
ax.plot(your_df['vals'])
plt.xticks(rotation='vertical')
ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_major_formatter(DateFormatter('%b'))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,如果您不想绘制每个月,您可以通过删除主要定位器让 matplotlib 为您处理。

fig = plt.figure(figsize=[10, 5])
ax = fig.add_subplot(111)
ax.plot(your_df['vals'])
plt.xticks(rotation='vertical')
# ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_major_formatter(DateFormatter('%b'))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

添加进入提供的链接,您DATE在使用的数据集中确实有一个字段 ( boulder-precip.csv)。实际上,您可以遵循相同的过程并按月绘制:

df = pd.read_csv('boulder-precip.csv')
df['DATE'] = pd.to_datetime(df['DATE'])
df = df.set_index('DATE')

fig = plt.figure(figsize=[10, 5])
ax = fig.add_subplot(111)
ax.plot(df['PRECIP'])
plt.xticks(rotation='vertical')
ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_major_formatter(DateFormatter('%b'))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述