如何避免Matplotlib中二维列表格式x、y数据产生重复图例标签
问题原因
当你向plt.plot()传入二维结构的x、y数据时,matplotlib会默认按列解析数据,为每一列单独绘制一条折线。你当前的输入数据有3列,会生成3个独立的折线对象,所有对象都继承了你设置的同一个label参数,最终就会在图例中出现多个重复标签。
解决方案
极简适配方案
不需要修改任何原始输入数据,直接提取plt.plot()返回的折线句柄,仅将第一个句柄传入图例生成逻辑即可:
import matplotlib.pyplot as plt idl_t, idl_q = [[0, 12, 20], [8, 14, 24]], [[90, 60, 90], [90, 60, 90]] # 绘图时接收返回的所有折线对象 lines = plt.plot(idl_t, idl_q, label="Some label") # 仅传入首个折线的句柄生成图例,避免重复 plt.legend(handles=[lines[0]]) plt.show()
通用去重方案
如果后续绘图场景中存在多个不同标签、也可能出现重复的情况,可以用全局图例去重逻辑:
import matplotlib.pyplot as plt idl_t, idl_q = [[0, 12, 20], [8, 14, 24]], [[90, 60, 90], [90, 60, 90]] plt.plot(idl_t, idl_q, label="Some label") # 其他绘图逻辑可写在此处 # 拿到当前轴的所有句柄和标签 handles, labels = plt.gca().get_legend_handles_labels() # 用字典自动去重,相同标签只保留第一个句柄 unique_legend = dict(zip(labels, handles)) plt.legend(unique_legend.values(), unique_legend.keys()) plt.show()
内容的提问来源于stack exchange,提问作者loamoza
相关产品推荐
相关产品推荐

