gpt4 book ai didi

Python Matplotlib (1) 将 x 轴标签格式设置为“年-季度”,(2) 将 Major_locator 设置为月末

转载 作者:行者123 更新时间:2023-11-30 21:51:03 26 4
gpt4 key购买 nike

我想做两件事:

  1. 我想将 x 轴格式设置为四分之一。我的时间序列数据以季度为单位。例如,对于日期 2012-12-31 我希望它显示为 2012Q4,对于 2013-03-31 作为 2013Q1 ,对于 2013-03-30 作为 2013Q2 等等。我可以使用
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))

设置格式。但我找不到将其设置为四分之一的方法。 pandas 有 Q, ( pandas format datetimeindex to quarters ) 但这在这里不起作用。我该怎么做?

  • 我希望主要刻度定位器位于季度末。我可以使用此代码(见下文)将其设置为每个月/季度的第 30 天,但我不知道如何将其设置为每个月/季度的最后一天,因为 6 月结束的季度于 30 日结束,而3 月份结束的季度于 31 日结束。
  • dayloc = mdates.MonthLocator(bymonth=(3,6,9,12),bymonthday=30)
    ax.xaxis.set_major_locator(dayloc)

    生成数据和绘图的完整代码如下:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    from datetime import datetime
    from datetime import timedelta

    from pandas.plotting import register_matplotlib_converters
    register_matplotlib_converters()

    dti = pd.date_range('2012-12-31', periods=30, freq='Q')
    s1 = pd.Series(range(30),index=dti)
    s2 = pd.Series(np.random.randint(100,1000,size=(30)),index=dti)

    df = s2.to_frame(name='count')
    print(df)
    f1 = plt.figure("Quarterly",figsize=(10,5))
    ax = plt.subplot(1,1,1)
    dayloc = mdates.MonthLocator(bymonth=(3,6,9,12),bymonthday=30)
    ax.xaxis.set_major_locator(dayloc)
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))

    y= [datetime.date(t) for t in df.index]
    z= [datetime.date(t).replace(day=1)+timedelta(days=0) for t in df.index]
    widths = [t1-t0-timedelta(days=0) for t0,t1 in zip(z,y)]

    ax.bar(y,df['count'],width=widths)
    plt.setp(ax.get_xticklabels(), rotation=90)
    f1.tight_layout()
    f1.show()
    input()

    最佳答案

    尝试使用 pd.DataFrame.to_period 和 pandas 绘图:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    from datetime import datetime
    from datetime import timedelta
    %matplotlib inline

    from pandas.plotting import register_matplotlib_converters
    register_matplotlib_converters()

    dti = pd.date_range('2012-12-31', periods=30, freq='Q')
    s1 = pd.Series(range(30),index=dti)
    s2 = pd.Series(np.random.randint(100,1000,size=(30)),index=dti)

    df = s2.to_frame(name='count')
    df = df.to_period(freq='Q')
    print(df)
    f1 = plt.figure("Quarterly",figsize=(10,5))
    ax = plt.subplot(1,1,1)
    # dayloc = mdates.MonthLocator([3,6,9,12])
    # ax.xaxis.set_major_locator(dayloc)
    # ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))

    # y= [datetime.date(t) for t in df.index]
    # z= [datetime.date(t).replace(day=1)+timedelta(days=0) for t in df.index]
    # widths = [t1-t0-timedelta(days=0) for t0,t1 in zip(z,y)]

    # ax.bar(y,df['count'],width=widths)
    df.plot.bar(ax=ax)
    plt.setp(ax.get_xticklabels(), rotation=90)
    f1.tight_layout()

    输出: enter image description here

    关于Python Matplotlib (1) 将 x 轴标签格式设置为“年-季度”,(2) 将 Major_locator 设置为月末,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60191082/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com