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

如何为matplotlib饼图添加右侧排列整齐的多标签图例

错误原因说明

  1. 代码中colors列表存在两处问题:第11个色值前多写了一个单引号,且列表总长度仅41个,需补全到50个与标签、数据量匹配,否则会触发报错
  2. 图例不显示的核心原因是调用ax1.pie()时未关联标签信息,matplotlib无法获取图例所需的文本内容,因此不会渲染图例

实现方案

可以提取饼图的色块对象,手动绑定标签生成多列图例,同时调整画布布局给图例预留空间,修改后的完整代码如下:

import matplotlib.pyplot as plt

labels = [i for i in range(50)]
print(len(labels))

sizes = [28, 63, 1046, 247,511,63,75,154,102,17,115,44,
55,744,13,3,37,1,1837,7,61,1,19,42,17,3,63,21,4,
1,1,1,1,20,427,259,23,38,50,66,14,38,7,4,5,2,6,6,6,18]

# 已修正多余单引号,补充了9个色值凑够50个,可替换为自己需要的色值
colors = ['#80bcff','#00dbca','#00e56c','#ff9465','#fff400','#ffe4c4',
'#e0eee0','#fff68f','#ffaeb9','#ffa07a','#48d1cc','#db7093','#bbffff','#ffb5c5','#ffbbff',
'#fa8072','#54ff9f','#fff5ee','#87ceff','#ffe1ff','#ff6347','#eed8ae','#ffff00','#ee82ee',
'#00f5ff','#ee5c42','#d8bfd8','#ee9a49','#5cacee','#9fb6cd','#6ca6cd','#eee5de','#43cd80',
'#cd7054','#436eee','#8b0000','#9b30ff','#ffb5c5','#ffdab9','#90ee90','#db7093',
'#a52a2a','#2e8b57','#800080','#ffd700','#40e0d0','#ff69b4','#1e90ff','#f4a460','#7fffd4']

# 可调整画布尺寸适配展示需求
fig1, ax1 = plt.subplots(figsize=(10,8))
# 提取饼图色块对象用于绑定图例
patches, _ = ax1.pie(sizes, colors = colors, startangle=90)

# 绘制环形饼图的中心白圈
centre_circle = plt.Circle((0,0),0.70,fc='white')
fig = plt.gcf()
fig.gca().add_artist(centre_circle)

ax1.axis('equal')

# 添加右侧多列图例
ax1.legend(patches, labels, 
           loc='upper left',
           bbox_to_anchor=(1.02, 1), # 锚点放在画布右侧外部
           ncol=3, # 3列布局,50个标签分为3列后总高度与图表适配
           fontsize=8, # 调整文字大小
           borderaxespad=0)

# 调整布局,给右侧图例留出20%的画布空间
plt.tight_layout(rect=[0, 0, 0.8, 1])

plt.show()

参数调整说明

  • 修改ncol参数可以调整图例列数,列数越大总高度越低
  • 修改fontsize可以调整图例文字大小,进一步适配高度
  • 调整bbox_to_anchor的第一个数值可以控制图例和图表的水平间距
  • 修改figsize参数可以调整整个画布的尺寸,适配不同展示需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:57:02