plotly / plotly/plotly.py

customdata parsed incorrectly when array contains more than 1 column in piechart

Abierto
#5,191 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug P2
Lenguaje dominante
Python
Estrellas
18.8k
Forks
2.8k
Merge medio
16 h 26 min
PR fusionados (30 d)
21

Descripción

When using more than one column to define customdata, the data seems to be parsed as a tuple.
The example below shows three versions of the same figure:

  • LEFT. Only one column of customdata. Works as expected.
  • CENTER. Two columns of customdata. The first column in customdata is not parsed correctly when using a :.1s format. The second column in customdata is not parsed correctly by hovertemplate in go.Pie but is parsed correctly by texttemplate.
  • RIGHT. Workaround using customdata as a tuple and selecting its first %{customdata[0][0]} and second %{customdata[0][1]} values accordingly.
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots

df = pd.DataFrame({
    'country': ['A', 'B', 'C'],
    'count':   [10, 20, 30],
    'total': [1.5e5, 4.5e4, 3.2e3],
    'ratio': [0.05, 0.10, 0.15]
})

fig = make_subplots(rows=1, cols=3, specs=[[{"type": "domain"}, {"type": "domain"}, {"type": "domain"}]])

# customdata parsed correctly with only one column
fig.add_trace(go.Pie(
    labels=df['country'],
    values=df['count'],
    customdata=df[['total']], # 1 column
    hovertemplate=(
        'Country: %{label}<br>'
        'Count: %{value}<br>'
        'Total documents: %{customdata[0]:.1s}'),
    hole=0.3
),
row=1, col=1)

# Problem with customdata
fig.add_trace(go.Pie(
    labels=df['country'],
    values=df['count'],
    customdata=df[['total', 'ratio']], # >1 columns
    hovertemplate=(
        'Country: %{label}<br>'
        'Count: %{value}<br>'
        'Total documents: %{customdata[0]:.1s}<br>'
        'Ratio: %{customdata[1]:.2f}'),
    texttemplate = "%{customdata[1]:.2p}", # correctly parsed
    hole=0.3
),
row=1, col=2)

# Workaround
fig.add_trace(go.Pie(
    labels=df['country'],
    values=df['count'],
    customdata=df[['total', 'ratio']], # >1 columns
    hovertemplate=(
        'Country: %{label}<br>'
        'Count: %{value}<br>'
        'Total documents: %{customdata[0][0]:.1s}<br>' # as tuple
        'Ratio: %{customdata[0][1]:.2f}'),
    texttemplate = "%{customdata[1]:.2p}",  # correctly parsed
    hole=0.3
),
row=1, col=3)

fig.show()

Tested using:
Plotly.py: 6.0.1
Pandas: 2.1.4

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza ejecutando la reproducción proporcionada de Plotly.py y Pandas, y luego rastrea cómo se pasa customdata de varias columnas al formateo de hovertemplate de los pie charts. El trabajo está terminado cuando ambas columnas de customdata se renderizan con los formatos solicitados sin tuple-style indexing, mientras que el caso de una columna y el comportamiento de texttemplate siguen siendo correctos.

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
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.