【问题标题】:Re-order axis in Plotly graph在 Plotly 图中重新排序轴
【发布时间】:2021-09-04 17:28:33
【问题描述】:

我有大约 3 年的数据,按月和年组织。我想将这些数据按月和年绘制为条形图,以月为 x 轴,以年为轨迹。问题是数据从 2018 年 9 月开始,所以要绘制的第一个月是 9 月,但我希望它是 1 月。我已经尝试过这样做,但是这些年是按递减顺序排列的,我也不想要。 这是一个代码示例。

import datetime
import pandas as pd
import plotly.graph_objects as go
import random

df = pd.DataFrame({})
numdays = 1000
base = datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(numdays)]
price = [random.randint(1,10) for i in range(numdays)]
df['price'] = price
df.index = date_list
df = df.resample('MS').sum()
df['month'] = df.index.month_name()
df['month number'] = df.index.month
df['year'] = df.index.year
year_list = df['year'].unique().tolist()
fig = go.Figure()

for year in year_list:
    df_aux = df[df.year==year]
    df_aux = df_aux.sort_values(by=['month number'])
    fig.add_trace(go.Bar(x=df_aux.month, y=df_aux['price'], \
                          name=year))

fig.show()

这是我得到的,但它从 9 月开始,我希望它是 1 月:

【问题讨论】:

    标签: python dataframe datetime plotly axis


    【解决方案1】:

    使用categorical axes from plotly 的此引用,我能够使用categoryorder 并设置catergoryarray,这允许您设置要用于轴的顺序列表。

    来自文档/参考:

    无论是否使用 Plotly Express,类别都可以使用 categoryorder 属性按字母顺序或按值排序:

    还有:

    这个例子展示了如何在使用时控制类别顺序 plotly.graph_objects 通过将 categoryorder 定义为“数组”来导出 属性 categoryarray 的排序。

    我添加的代码行是:

    fig.update_xaxes(categoryorder='array', categoryarray= ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'])
    

    这给出了如下所示的输出:

    完整代码:

    import datetime
    import pandas as pd
    import plotly.graph_objects as go
    import random
    
    df = pd.DataFrame({})
    numdays = 1000
    base = datetime.datetime.today()
    date_list = [base - datetime.timedelta(days=x) for x in range(numdays)]
    price = [random.randint(1,10) for i in range(numdays)]
    df['price'] = price
    df.index = date_list
    df = df.resample('MS').sum()
    df['month'] = df.index.month_name()
    df['month number'] = df.index.month
    df['year'] = df.index.year
    year_list = df['year'].unique().tolist()
    
    fig = go.Figure()
    
    for year in year_list:
        df_aux = df[df.year==year]
        df_aux = df_aux.sort_values(by=['month number'])
        fig.add_trace(go.Bar(x=df_aux.month, y=df_aux['price'], \
                              name=year))
    
    fig.update_xaxes(categoryorder='array', categoryarray= ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'])
    
    fig.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      相关资源
      最近更新 更多