【问题标题】:Seaborn lineplot, show months when index of your data is DateSeaborn 线图,当您的数据索引为日期时显示月份
【发布时间】:2021-12-13 20:22:04
【问题描述】:

我有一个 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 轴上显示每年的多个(不是全部,例如每个季节的第一个月)月份。

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

【问题讨论】:

    标签: python seaborn


    【解决方案1】:

    您可以使用MonthLocator 或者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)
    

    【讨论】:

    • 看起来很棒。我只是想知道,我怎样才能以一种干净的方式包含 Jan?
    • 查看编辑。我想我只需要调整主要刻度长度以使一月份的月份名称与其他月份保持一致。
    • 太棒了。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多