python - 在 Plotly 图中重新排序 Axis

标签 python dataframe datetime plotly axis

我有按月和年组织的 ~3 年的数据。我想按月和年将此数据绘制为条形图,以月为 x Axis ,以年为轨迹。问题是数据从 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()
这就是我得到的,但它从九月开始,我希望它是一月:
This is what I get, but it starts in September and I want it to be January

最佳答案

将此引用用于 categorical axes from plotly ,我可以使用 categoryorder并设置 catergoryarray ,它允许您设置要用于 Axis 的顺序列表。
从文档/引用:

Whether using Plotly Express or not, categories can be sorted alphabetically or by value using the categoryorder attribute:


并且:

This example shows how to control category order when using plotly.graph_objects by defining categoryorder to "array" to derive the ordering from the attribute categoryarray.


我添加的代码行是:
fig.update_xaxes(categoryorder='array', categoryarray= ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'])
这给出了一个看起来像这样的输出:
enter image description here
完整代码:
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()

关于python - 在 Plotly 图中重新排序 Axis ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68061197/

相关文章:

python - 根据条件 pandas 数据框列删除字符串

python - ipython无法加载sql

python - 在Python中使用曼哈顿距离创建新的数据框

python - 如何根据列映射减去两个数据帧?

Python 3.6 datetime.fromtimestamp 在给定 0 时抛出错误

python - 通过 beautifulsoup 安全删除标签中的子项

python - 查找重复行,将某一列乘以重复行数,删除重复行

c# - 在 ASP.NET MVC 中获取 DateTime.UtcNow 有多难?

datetime - 为什么 map[time.Time]string 有时不起作用?

python - 将对象列表转换为列表字典