plotly / plotly/plotly.py

Bar ordering is inconsistent

Ouverte
#4,310 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug P3
Langage dominant
Python
Étoiles
18.8k
Forks
2.8k
Merge moyen
16 h 26 min
PR mergées (30 j)
21

Description

Plotly 5.15.0
Python 3.11

When creating a stacked bar chart with a sorted dataframe the order of bars is inconsistent. In some cases I get the desired result sorted by total bar length and in other cases I get what appears to be sorted by category.

For example, the following sorted dataframe is charted with the expected bar order:

   index        name category  value  total
0      2  rnlblpykns     cat1     75    173
1      4  rnlblpykns     cat3     66    173
2      1  rnlblpykns     cat0     26    173
3      3  rnlblpykns     cat2      6    173
4      8  lfqlfxlpxt     cat1     77     86
5      7  lfqlfxlpxt     cat0      9     86
6      5  axnqvjlmql     cat0     46     54
7      6  axnqvjlmql     cat1      8     54
8      0  zfbcsrusbq     cat0     18     18

correct

While the chart for the following sorted dataframe appears to be ordered by 'name':

    index        name category  value  total
0       4  tprmmexxdf     cat4     96    307
1       1  tprmmexxdf     cat1     89    307
2       0  tprmmexxdf     cat0     58    307
3       2  tprmmexxdf     cat2     54    307
4       3  tprmmexxdf     cat3     10    307
5      10  iontrwxbjg     cat0     91    271
6      11  iontrwxbjg     cat1     86    271
7      13  iontrwxbjg     cat3     46    271
8      14  iontrwxbjg     cat4     37    271
9      12  iontrwxbjg     cat2     11    271
10      7  ffxalebxgi     cat2     57    234
11      8  ffxalebxgi     cat3     48    234
12      5  ffxalebxgi     cat0     44    234
13      9  ffxalebxgi     cat4     44    234
14      6  ffxalebxgi     cat1     41    234
15     16  bzbaayrcra     cat1     78    146
16     15  bzbaayrcra     cat0     55    146
17     18  bzbaayrcra     cat3      8    146
18     17  bzbaayrcra     cat2      5    146
19     20  ejehjurxge     cat1     50    132
20     22  ejehjurxge     cat3     39    132
21     23  ejehjurxge     cat4     22    132
22     21  ejehjurxge     cat2     15    132
23     19  ejehjurxge     cat0      6    132

image

The code is as follows:

import random
import string

import plotly.express as px
import pandas as pd


def random_dataframe():
    names = []
    categories = []
    values = []
    for i in range(random.randint(3, 6)):
        letters = string.ascii_lowercase
        name = ''.join(random.choice(letters) for i in range(10))
        for j in range(random.randint(1, 5)):
            names.append(name)
            categories.append(f"cat{j}")
            values.append(random.randint(1, 100))

    df = pd.DataFrame({
        "name": names,
        "category": categories,
        "value": values
    })

    return df


df = random_dataframe()
df["total"] = df.groupby("name")["value"].transform(sum)
df = df.sort_values(by=["total", "name", "value"], ascending=False).reset_index()

print(df)

fig = px.bar(
    df,
    x="value",
    y="name",
    orientation="h",
    color="category",
    width=640,
    height=480
)

fig.show()

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Exécutez l’exemple fourni en Python 3.11 avec Plotly Express px.bar et comparez les deux cas de dataframe. Étudiez comment l’ordre des barres est dérivé des colonnes groupées name, category et value. Le travail est considéré comme terminé lorsque des données triées de manière équivalente produisent un ordre de barres cohérent et documenté, et que le comportement est couvert par un test de régression.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
pandas, python
Domaine
data-visualization
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
38/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.