Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
bedoya-daniel opened this issue May 20, 2025 · 0 comments
Labels
bug something broken P2 considered for next cycle

Comments

@bedoya-daniel
Copy link

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

@gvwilson gvwilson changed the title Bug report: customdata parsed incorrectly when array contains more than 1 column in piechart customdata parsed incorrectly when array contains more than 1 column in piechart May 20, 2025
@gvwilson gvwilson added bug something broken P2 considered for next cycle labels May 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug something broken P2 considered for next cycle
Projects
None yet
Development

No branches or pull requests

2 participants