如何为matplotlib饼图添加右侧排列整齐的多标签图例
错误原因说明
- 代码中
colors列表存在两处问题:第11个色值前多写了一个单引号,且列表总长度仅41个,需补全到50个与标签、数据量匹配,否则会触发报错 - 图例不显示的核心原因是调用
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
相关产品推荐
相关产品推荐

