在 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 Python:在具有多个 Y 轴的分组条形图中对齐 X 轴