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

如何替换Matplotlib饼图图例中的标签?解决labels参数设置无效问题

解决Matplotlib饼图图例标签不更新的问题

我懂你遇到的这个坑了——当你在ax.pie()里指定了饼图上的缩写标签后,想用plt.legend(labels=data_names)把图例换成完整名称却没效果,这是因为Matplotlib在你设置labels参数时,已经自动把每个饼块和这些缩写标签绑定成了图例条目,直接覆盖labels参数根本不会生效。

这里给你一个简单直接的解决方案:

步骤1:捕获饼图的Patches对象

调用ax.pie()时,它会返回饼块的补丁(patches)和文本对象,我们需要把这些patches保存下来,用来和新标签关联:

# 捕获pie返回的patches和文本标签(下划线表示我们不需要文本对象)
patches, _ = ax.pie(data_values, labels=data_names2, colors=colors, radius=5, center=(0, 0), 
                    wedgeprops={"linewidth": 0.4, "edgecolor": "white"}, frame=True, rotatelabels=True)

步骤2:手动关联Patches和完整名称到图例

把保存的patches传给plt.legend(),同时指定完整名称作为图例标签:

plt.legend(patches, data_names, loc='best', bbox_to_anchor=(1, 0.92))

这么做的核心逻辑是:我们跳过Matplotlib自动绑定的标签,手动把每个饼块(patches)和对应的完整名称绑定,强制图例使用我们指定的内容,而饼图上依然保留缩写名称,完美实现你的需求。

完整可运行代码示例

import matplotlib.pyplot as plt

# 模拟你的数据
data_values = [35, 25, 40]
data_names2 = ["P-A", "P-B", "P-C"]  # 图表显示的缩写名称
data_names = ["Product Alpha", "Product Beta", "Product Gamma"]  # 图例需要的完整名称
colors = ["#FF9AA2", "#FFB7B2", "#FFDAC1"]

fig, ax = plt.subplots()

# 捕获饼块的patches对象
patches, _ = ax.pie(data_values, labels=data_names2, colors=colors, radius=5, center=(0, 0), 
                    wedgeprops={"linewidth": 0.4, "edgecolor": "white"}, frame=True, rotatelabels=True)

# 用patches和完整名称生成图例
plt.legend(patches, data_names, loc='best', bbox_to_anchor=(1, 0.92))

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 22:02:29