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

如何在Python版Plotly中截断或换行饼图图例文本

Plotly饼图长文本图例优化方案

问题场景

使用Plotly绘制带图例的饼图时,短文本图例展示效果友好,但长文本图例排版杂乱、展示效果不专业,两种效果对比如下:

  • 短文本图例效果:
    短文本图例正常展示效果
  • 长文本图例异常展示效果:
    长文本图例排版杂乱效果

当前基础绘图代码:

fig = px.pie(df, values = 'values', names = 'names')
fig.update_layout(title = 'Pie Chart', title_x = 0.5)
fig.show()

目标是通过图例文本截断或自动换行,优化长文本场景下的展示效果。


可落地实现方案

两种方案均基于Plotly原生能力实现,无需安装额外第三方库:

方案1:配置图例宽度实现自动换行

直接在布局配置中指定图例区域的最大宽度,超出宽度的文本会自动折行,不需要修改原始数据源:

fig = px.pie(df, values = 'values', names = 'names')
fig.update_layout(
    title = 'Pie Chart',
    title_x = 0.5,
    legend = dict(
        width=280, # 图例区域最大宽度,单位像素,可根据画布大小调整
        font=dict(size=12),
        itemwidth=40
    )
)
fig.show()

如果需要精准控制换行位置,可以在传入names字段前,在需要换行的位置插入HTML换行标签<br>,Plotly可以直接解析渲染该标签实现手动换行。

方案2:长文本截断+悬浮提示展示完整内容

如果希望图例区域保持简洁,可以对过长的分类名称做截断处理,被截断的完整内容通过鼠标悬浮提示展示,兼顾简洁性和信息完整性:

# 自定义截断阈值,超过15个字符的名称截断后加省略号
max_text_len = 15
df['legend_names'] = df['names'].apply(
    lambda x: f"{x[:max_text_len]}..." if len(x) > max_text_len else x
)

fig = px.pie(
    df,
    values='values',
    names='legend_names',
    # 悬浮时展示完整原始名称,隐藏截断后的展示用名称
    hover_data={'names': True, 'legend_names': False}
)
fig.update_layout(title='Pie Chart', title_x=0.5)
fig.show()

选型参考:如果画布预留的图例空间充足,优先选择自动换行方案;如果希望整体视觉更简洁,选择截断+悬浮提示方案即可。


内容的提问来源于stack exchange,提问作者Rafael Colombo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:48:09