Seaborn 线图,显示数据索引为日期的月份

Seaborn lineplot, show months when index of your data is Date

我有一个 Kaggle 数据集 (link)。 我读取了数据集,并将 Date 设置为索引列:

museum_data = pd.read_csv("museum_visitors.csv", index_col = "Date", parse_dates = True)

那么,museum_data 就像:

Date Avila Adobe Firehouse Museum Chinese American Museum America Tropical Interpretive Center
2014-01-01 24778 4486 1581 6602
2014-02-01 18976 4172 1785 5029
... ... ... ... ...
2018-10-01 19280 4622 2364 3775
2018-11-01 17163 4082 2385 4562

这是我用来在 seaborn 中绘制 lineplot 的代码:

plt.figure(figsize = (20,8))
sns.lineplot(data = museum_data)
plt.show()

结果是这样的:

我想知道的是,如何在 x 轴上显示每年的多个(不是全部,例如每个季节的第一个月)月份。

提前谢谢大家的宝贵时间。

您可以使用 MonthLocator and perhaps ConciseDateFormatter 添加显示几个月的小刻度,如下所示:

import matplotlib.dates as mdates

...

fig, ax = plt.subplots(figsize = (20,8))
sns.lineplot(data = museum_data, ax=ax)

locator = mdates.MonthLocator(bymonth=[4,7,10])
ax.xaxis.set_minor_locator(locator)
ax.xaxis.set_minor_formatter(mdates.ConciseDateFormatter(locator))

输出:

编辑(更接近):您可以添加以下内容以显示一月:

ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b\n%Y'))

输出:

编辑 2(可能有更好的方法,但我生疏了):

length = plt.rcParams["xtick.minor.size"]
pad = plt.rcParams['xtick.minor.pad']
ax.tick_params('x', length=length, pad=pad)