使用此参考来自plotly的分类轴 https://plotly.com/python/categorical-axes/#automatically-sorting-categories-by-name-or-total-value,我能够使用categoryorder
并设置catergoryarray
,它允许您设置要用于轴的顺序列表。
来自文档/参考:
无论是否使用 Plotly Express,类别都可以使用categoryorder 属性按字母顺序或按值排序:
并且:
此示例展示了如何在使用时控制类别顺序
plotly.graph_objects通过定义categoryorder为“array”来导出
属性类别数组的排序。
我添加的代码行是:
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()