在Plotly图形中对轴重新排序

2024-10-02 02:33:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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()

这是我得到的,但它在九月开始,我希望它是一月:

This is what I get, but it starts in September and I want it to be January


Tags: 数据importgodffordatetimeindexyear
1条回答
网友
1楼 · 发布于 2024-10-02 02:33:55

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

从文件/参考中:

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()

相关问题 更多 >

    热门问题