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

如何移除Matplotlib子图图例中的重复标签

解决Matplotlib图例重复标签的问题

要去掉图例里的重复项,最直接的办法是利用字典键不能重复的特性来过滤——把标签当键,对应的图例元素(线条、散点标记)当值,重复标签会自动被过滤掉,最后用去重后的内容生成图例即可。

下面是修改后的完整代码:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
    
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)
    
ax1.scatter(1,2,label='a',color='black')
ax1.plot(np.array([1, 2]), np.array([1, 2]),color='b',label='xvalues')
ax2.scatter(3,4,label='a',color='black')
ax3.scatter(5,6,label='b',color='red')
ax4.scatter(7,8,label='b',color='red')

# 收集所有子图的图例元素和标签
lines_labels = [ax.get_legend_handles_labels() for ax in fig.axes]
lines, labels = [sum(lol, []) for lol in zip(*lines_labels)]

# 手动遍历,保留每个标签第一次出现的图例元素
unique_items = {}
for line, label in zip(lines, labels):
    if label not in unique_items:
        unique_items[label] = line

# 提取去重后的标签和元素
unique_lines = list(unique_items.values())
unique_labels = list(unique_items.keys())

# 生成只含唯一标签的图例
fig.legend(unique_lines, unique_labels, scatterpoints = 1)
plt.show()

关键逻辑说明:

  • 遍历收集到的所有图例元素和标签,遇到未记录的标签就存入字典,已存在的标签直接跳过,保证每个标签只保留第一次出现的对应元素。
  • 最后从字典中提取值(图例元素)和键(标签),用来生成最终图例,就能得到仅含1个'a'、1个'b'和1个'xvalues'的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:25:25