如何像pandas图一样格式化matplotlib图的timeseries轴

5kgi1eie  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(209)

我用pd.Series([1]*month_limits.size, month_limits).plot(ax=ax)创建了以下图表
如何用matplotlib重新创建相同的x ticks标签?我的意思是年和月不互相覆盖

我最好的办法是同时拥有几年和几个月,但几年是压倒几个月的

import datetime

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd

month_limits = pd.date_range('2021-08', '2023-01', freq="1m",
                             normalize=True) + datetime.timedelta(days=1)
plt.plot(month_limits, [1]*month_limits.size)

l1 = mdates.YearLocator()
l2 = mdates.MonthLocator(interval=1)
ax.xaxis.set_major_locator(l1)
ax.xaxis.set_minor_locator(l2)
ax.xaxis.set_major_formatter(mdates.ConciseDateFormatter(l1))
ax.xaxis.set_minor_formatter(mdates.ConciseDateFormatter(l2))

5cg8jx4n

5cg8jx4n1#

  • 使用set_minor_locatorset_minor_formatter表示月份'%b'
  • 使用set_major_locatorset_major_formatter表示月份和年份'%b\n%Y'
  • mdates.YearLocator(month=1)其中month是显示年份的月份。
    *python 3.11.2matplotlib 3.7.1中测试
month_limits = pd.date_range('2021-08', '2023-01', freq="1m", normalize=True) +  pd.Timedelta(days=1)

fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(month_limits, [1]*month_limits.size)

# set locators
ax.xaxis.set_minor_locator(mdates.MonthLocator(interval=2))
ax.xaxis.set_major_locator(mdates.YearLocator(month=1))
# set formatters
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b\n%Y'))
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%b'))

month_limits = pd.date_range('2021-08', '2023-01', freq="1m", normalize=True) + pd.Timedelta(days=1)

fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(month_limits, [1]*month_limits.size)

# set locators
ax.xaxis.set_minor_locator(mdates.MonthLocator(bymonth=range(1, 13, 3)))
ax.xaxis.set_major_locator(mdates.YearLocator(month=1))
# set formatter
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b\n%Y'))
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%b'))

相关问题