add "Non-leaves rows are not permitted in the dataframe" with sunburst diagrams
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 18.8k
- Forks
- 2.8k
- Merge moyen
- 16 h 26 min
- PR mergées (30 j)
- 21
Description
It is sometimes useful to have non-leaf data in a Sunburst diagram. However, there is no way to tell Plotly Express to ignore or accept non-leaves.
Minimum viable example:
import pandas as pd
import plotly.express as px
lst = [['Alice', "Bob"], ['Alice', "Bob", "Carrie"], ["Alice", "Bob", "Chuck"]]
df = pd.DataFrame(lst)
fig = px.sunburst(df, path=df.columns)
Gives the error:
ValueError: ('Non-leaves rows are not permitted in the dataframe \n', 0 Alice
1 Bob
2
Name: 0, dtype: object, 'is not a leaf.')
This can be fixed by commenting out part of plotly/express/_core.py
def _check_dataframe_all_leaves(df):
df_sorted = df.sort_values(by=list(df.columns))
null_mask = df_sorted.isnull()
df_sorted = df_sorted.astype(str)
null_indices = np.nonzero(null_mask.any(axis=1).values)[0]
for null_row_index in null_indices:
row = null_mask.iloc[null_row_index]
i = np.nonzero(row.values)[0][0]
if not row[i:].all():
raise ValueError(
"None entries cannot have not-None children",
df_sorted.iloc[null_row_index],
)
df_sorted[null_mask] = ""
row_strings = list(df_sorted.apply(lambda x: "".join(x), axis=1))
#for i, row in enumerate(row_strings[:-1]):
#if row_strings[i + 1] in row and (i + 1) in null_indices:
#raise ValueError(
# "Non-leaves rows are not permitted in the dataframe \n",
# df_sorted.iloc[i + 1],
# "is not a leaf.",
#)
It would be great if px.sunburst could have an option to disable these checks, or to skip over any row which is not a leaf.
How can I propose this as an option?
Thanks!
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez dans plotly/express/_core.py, au niveau de _check_dataframe_all_leaves, et reproduisez le problème avec l’exemple fourni utilisant pandas et px.sunburst. Étudiez comment px.sunburst pourrait exposer une option permettant d’accepter ou d’ignorer les lignes qui ne sont pas des feuilles, et définissez comme condition de réussite que l’exemple ne déclenche plus l’erreur actuelle liée aux lignes qui ne sont pas des feuilles lorsque cette option est activée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- data-visualization
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100