You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly Express环形图customdata索引异常及格式化失效问题求助

Plotly Express环形图customdata索引异常及格式化失效问题求助

嗨,我来帮你排查这个问题~你遇到的两个现象其实是同一个根源导致的:customdata没有被Plotly正确识别为多列数据,而是把每一行的三个值当成了一个单独的字符串,所以索引[1][2]自然找不到对应内容,格式化数字的操作也会因为字符串无法转成数值而返回NaN。

问题根源分析

你当前传递customdata=exceldf[['Live Price', 'Purchase Price', 'Quantity']].to_numpy()看起来没问题,但Plotly对于饼图(包括环形图)的customdata,有时候对numpy数组的识别会出现偏差,导致整行数据被序列化为逗号分隔的字符串,而不是拆分成独立的索引项。

解决方案

试试下面两种方法,应该能解决你的问题:

方法1:改用列表格式传递customdata

把numpy数组转成Python原生列表,Plotly对列表的兼容性更好:

donutchart.update_traces(
    customdata=exceldf[['Live Price', 'Purchase Price', 'Quantity']].values.tolist(),
    hovertemplate='Live Price: $%{customdata[0]:,.2f}<br>Purchase Price: $%{customdata[1]:,.2f}<br>Quantity: %{customdata[2]:,.0f}<extra></extra>'
)

方法2:直接在px.pie中使用hover_data(修正你的错误用法)

你之前说用hover_data报错,应该是没配合hovertemplate正确使用。试试这种方式,更符合Plotly Express的设计逻辑:

donutchart = px.pie(
    exceldf, 
    names='Ticker', 
    values='Weight', 
    hole=0.5,
    hover_data=['Live Price', 'Purchase Price', 'Quantity']  # 直接传入要显示的列名
)

donutchart.update_traces(
    hovertemplate='Ticker: %{label}<br>Weight: %{value}<br>Live Price: $%{customdata[0]:,.2f}<br>Purchase Price: $%{customdata[1]:,.2f}<br>Quantity: %{customdata[2]:,.0f}<extra></extra>'
)

这样hover_data会自动把指定列的数据注入到customdata中,不需要手动转数组,而且格式会被正确识别。

额外验证小技巧

你可以先打印一下customdata的结构,确认是不是二维的:

print(exceldf[['Live Price', 'Purchase Price', 'Quantity']].values.tolist())

如果输出是类似[[100.5, 90.2, 5], [80.3, 75.1, 10]]这样的二维列表,那就是正确的结构,Plotly就能正确识别每个索引项。

当customdata结构正确后,你尝试的格式化语法$%{customdata[0]:,.2f}就会正常工作,不会再出现NaN啦~

备注:内容来源于stack exchange,提问作者NicolasToribio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:20:30