13 votes

Réorganiser les axes dans un graphique Plotly

J'ai des données de ~3 ans organisées par mois et année. Je souhaite représenter ces données sous forme de diagramme à barres par mois et par année, avec le mois en abscisse et l'année en ordonnée. Le problème est que les données commencent en septembre 2018, donc le premier mois à tracer est septembre, mais je veux que ce soit janvier. J'ai essayé de le faire, mais les années sont alors en ordre décroissant, ce que je ne veux pas non plus. Voici un exemple de code.

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

C'est ce que je reçois, mais cela commence en septembre et je veux que ce soit en janvier :

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

34voto

AS11 Points 781

L'utilisation de cette référence pour axes catégoriels de plotly J'ai pu utiliser l'outil categoryorder et définir le catergoryarray qui vous permet de définir la liste de l'ordre que vous souhaitez utiliser pour votre axe.

Extrait de la documentation/référence :

Que vous utilisiez Plotly Express ou non, les catégories peuvent être triées par ordre alphabétique ou par valeur à l'aide de l'attribut categoryorder :

et aussi :

Cet exemple montre comment contrôler l'ordre des catégories lors de l'utilisation de la fonction plotly.graph_objects en définissant categoryorder à "array" pour dériver l'ordre des catégories. l'ordre à partir de l'attribut categoryarray.

La ligne de code que j'ai ajoutée est la suivante

fig.update_xaxes(categoryorder='array', categoryarray= ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'])

et cela a donné un résultat qui ressemblait à ceci :

enter image description here

Le code complet :

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

1voto

arti gupta Points 99

Vous pouvez définir les ordres de catégorie pour le mois de la manière suivante :

    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['year'] = df.index.year
    df['year'] = pd.Categorical(df['year'])
    fig = px.bar(df,x='month', y='price',
                 category_orders={'month':['January', 'February', 'March',
                                        'April', 'May', 'June', 'July', 
                                        'August', 'September', 'October', 'November', 'December']},
                color='year',barmode="group")

    fig.show()

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X