Python使用Plotly绘制饼图时如何移除0%标签并保留零值对应图例项
Plotly 饼图保留0值分类图例、隐藏0%标签实现方案
实现核心逻辑
首先需要确保所有需要展示的分类都明确传入配置中,再通过两个关键参数分别控制图例保留规则和饼块文本显示规则:
- 关闭Plotly默认的分类排序功能,避免0值分类被自动过滤
- 给每个分类单独配置文本显示规则,0值分类不展示饼块内的百分比文本
完整代码示例
使用plotly.express实现
import plotly.express as px # 所有需要展示的分类,包含数值为0的分类 category_list = ["分类A", "分类B", "分类C", "分类D"] value_list = [45, 0, 30, 25] fig = px.pie( names=category_list, values=value_list, # 关闭自动排序,严格保留传入的所有分类 sort=False ) # 配置文本显示规则 fig.update_traces( # 百分比显示格式,可根据需求调整小数位数 texttemplate="%{percent:.0%}", # 仅数值大于0的分类显示内部文本,0值分类不显示 textposition=["inside" if val > 0 else "none" for val in value_list] ) fig.show()
使用plotly.graph_objects实现
import plotly.graph_objects as go category_list = ["分类A", "分类B", "分类C", "分类D"] value_list = [45, 0, 30, 25] fig = go.Figure(data=[go.Pie( labels=category_list, values=value_list, sort=False, texttemplate="%{percent:.0%}", textposition=["inside" if val > 0 else "none" for val in value_list] )]) fig.show()
关键参数说明
sort=False:Plotly默认会按数值从大到小排序分类,同时自动过滤数值为0的分类,关闭该功能后会严格按照传入的分类顺序保留所有分类,所有分类都会显示在图例中textposition列表推导:针对每个分类的数值单独判断显示规则,0值分类不渲染任何文本,自然不会出现0%标签- 如需调整百分比显示精度,修改
texttemplate中的.0%即可,例如.1%代表保留1位小数
内容的提问来源于stack exchange,提问作者Mauro Assis
相关产品推荐
相关产品推荐

