【问题标题】:Matplotlib x axis date tick frequencyMatplotlib x 轴日期刻度频率
【发布时间】:2020-10-01 07:41:35
【问题描述】:

我有一个看起来像这样的简单数据框(年份是日期时间索引列):

Year         A          B
2018-01-01  1.049400    1.034076    
2017-01-01  1.056371    1.032066    
2016-01-01  1.063413    1.030055 

我使用以下方法绘制数据:

df['A'].plot()

df['B'].plot()

每 5 年获取一次带有日期刻度标签的图表。

如何让年份刻度每 2 年(或任何其他数字)出现一次?

【问题讨论】:

    标签: python pandas dataframe datetime matplotlib


    【解决方案1】:

    检查此代码:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.dates as md
    
    x = range(2000, 2018, 1)
    year = [f'{str(y)}-01-01' for y in x]
    
    df = pd.DataFrame({'Year': year,
                       'A': np.sin(x),
                       'B': np.cos(x)})
    
    df['Year'] = pd.to_datetime(df['Year'], format = '%Y-%m-%d').dt.date
    df.set_index('Year', inplace = True)
    
    fig, ax = plt.subplots(1, 1, figsize = (6, 4))
    
    df['A'].plot()
    df['B'].plot()
    
    step = 2
    ax.xaxis.set_major_locator(md.YearLocator(step, month = 1, day = 1))
    ax.xaxis.set_major_formatter(md.DateFormatter('%Y'))
    
    plt.legend()
    plt.show()
    

    您可以使用md.YearLocator() 管理刻度数,尤其是使用step 值。我为这种方法报告了documentation
    注意df索引的类型:为了让代码正常工作,dataframe索引列必须是datetime.date,所以我用.dt.date的方法从pandas._libs.tslibs.timestamps.Timestamp转换而来(因为我建了数据框)到datetime.date。这取决于您拥有的数据类型。
    一些例子:

    步长 = 2

    步骤 = 4

    步长 = 10

    【讨论】:

    • 我尝试了代码,但效果不佳。我认为我的日期索引出了点问题。当我使用您的代码设置 a=30、b=48 和 step=1 时,我得到的图表与我发布的相同。我的起始年份是 2000 年,最后一年是 2018 年,所以 a=30 是 1970+30=2000,我假设 1970+48=2018。当我设置 step=2 时,刻度每 10 年出现一次,而不是 5 年。
    • 我更新了我的答案。注意数据框索引列类型:它必须是datetime.date 类型。
    猜你喜欢
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2021-03-05
    • 2021-04-03
    • 2020-04-11
    • 1970-01-01
    • 2016-06-25
    • 2019-03-02
    相关资源
    最近更新 更多