删除matplotlib图例中的重复标签[重复]

Posted

技术标签:

【中文标题】删除matplotlib图例中的重复标签[重复]【英文标题】:Remove repeated lables in matplotlib legend [duplicate] 【发布时间】:2016-01-30 05:00:06 【问题描述】:

如果您使用 matplotlib 绘制多条线或点,有时您可能会发现出现重复标签的情况。例如:

for i in range(5):
    Y1=boatarrays[i]
    Y2=cararrays[i]
    ax.plot(X,Y1,color='r',label='Boats')
    ax.plot(X,Y2,color='b',label='Cars')

如何让'Boats''Cars' 只出现一次?

【问题讨论】:

【参考方案1】:
    import matplotlib.pyplot as plt
    #Prepare fig
    fig = plt.figure()
    ax  = fig.add_subplot(111)
    for i in range(5):
        Y1=boatarrays[i]
        Y2=carsarrays[i]
        ax.plot(X,Y1,color='r',label='Boats')
        ax.plot(X,Y2,color='b',label='Cars')
    #Fix legend
    hand, labl = ax.get_legend_handles_labels()
    handout=[]
    lablout=[]
    for h,l in zip(hand,labl):
       if l not in lablout:
            lablout.append(l)
            handout.append(h)
    fig.legend(handout, lablout)

【讨论】:

【参考方案2】:

我更喜欢使用性能更快、编写更紧凑的 numpy 函数。

import numpy as np
import matplotlib.pyplot as plt

fig,ax = plt.subplots(figsize=(7.5,7.5))

X = np.arange(10)

for i in range(5):
    Y1=np.random.uniform(low=0.0,high=1.0,size=(10))    #boatarrays[i]
    Y2=np.random.uniform(low=0.0,high=1.0,size=(10))    #cararrays[i]
    ax.plot(X,Y1,color='r',label='Boats')
    ax.plot(X,Y2,color='b',label='Cars')

hand, labl = ax.get_legend_handles_labels()
plt.legend(np.unique(labl))
plt.tight_layout()
plt.show()

【讨论】:

以上是关于删除matplotlib图例中的重复标签[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何为 matplotlib 图例命名

Matplotlib自动图例外图[重复]

matplotlib图例超出窗口区域[重复]

Python - 如何隐藏标签并保留图例 matplotlib?

使用 for 循环绘图时,如何跳过图例中的重复标签?

删除两个ggplot图例之一[重复]