【问题标题】:How to set x-ticks to months with `set_major_locator`?如何使用 `set_major_locator` 将 x-ticks 设置为月份?
【发布时间】:2019-08-21 07:39:05
【问题描述】:

我正在尝试使用以下代码将 x-ticks 设置为 [Jan., Feb., ...]

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'))

我得到下图,没有 x-ticks

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

非常感谢。

【问题讨论】:

  • 假设您不想显示 0001 年的数据。因此您需要指定 x 值作为您的日期。
  • 嗨,很抱歉我不能完全关注你。你能说得更具体点吗?
  • plt.plot(x, y) -- x 应该在这里?在上面的代码中,您只提供y
  • x默认是y的索引
  • 是的。但是一个月有多少个指数呢?

标签: python matplotlib


【解决方案1】:

您目前拥有的数据类型不是很清楚。但以下是我在 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'))

请注意,如果您不想绘制每个月,您可以让 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'))

已添加进入提供的链接,您在使用的数据集中确实有一个 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'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2021-02-03
    • 1970-01-01
    • 2014-05-10
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    相关资源
    最近更新 更多