在 Plotly 图中重新排序轴

Posted

技术标签:

【中文标题】在 Plotly 图中重新排序轴【英文标题】:Re-order axis in Plotly graph 【发布时间】: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 月:

【问题讨论】:

【参考方案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()

【讨论】:

以上是关于在 Plotly 图中重新排序轴的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Plotly 删除堆叠和分组条形图中的 x 轴刻度标签

如何从 plotly 中删除图中的轴刻度线?

Plotly:双击放大图中的空白区域会在重置轴时选择新点

Plotly Python:在具有多个 Y 轴的分组条形图中对齐 X 轴

如何在plotly python中将箱形图中位数与多类别x轴连接起来

Plotly:在散点图分类轴上躲避重叠点