如何在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
相关产品推荐
相关产品推荐

