Bar ordering is inconsistent
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 18.8k
- Forks
- 2.8k
- Merge medio
- 16 h 26 min
- PR fusionados (30 d)
- 21
Descripción
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
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
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()
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Ejecuta el ejemplo proporcionado de Python 3.11 con Plotly Express px.bar y compara los dos casos de dataframe. Investiga cómo se deriva el orden de las barras a partir de las columnas agrupadas name, category y value. Se considera terminado cuando unos datos ordenados de forma equivalente producen un orden de barras coherente y documentado, y el comportamiento está cubierto por una prueba de regresión.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- pandas, python
- Área
- data-visualization
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 38/100