Подтвердить что ты не робот

Показывать только определенные предметы в легенде Python Matplotlib

В настоящее время я рисую сложную гистограмму большого количества таксономических данных и хочу показать только значимые виды в легенде (из ~ 500 я хочу показать ~ 25). Есть ли простой способ сделать это? Ниже приведен код:

labels=['0','20','40','60','80','100','120']
ax1=subj1df.plot(kind='barh', stacked=True,legend=True,cmap='Paired', grid=False)
legend(ncol=2,loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0.)
label1=['Baseline','8h','24h','48h','96h','120h']
ax1.set_yticklabels(label1, fontdict=None, minor=False)
plt.title('Subject 1 Phyla',fontweight='bold')
plt.savefig('Subject1Phyla.eps', format='eps', dpi=1000)
ax1.set_xticklabels(labels)

Изменить: попробовал добавить это, чтобы показать только одну запись легенды, однако возвращает только пустую легенду:

h, l = ax1.get_legend_handles_labels()
legend(l[4],h[4],ncol=2,loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0.)
4b9b3361

Ответ 1

Я часто вставляю пустую метку для легенд, которые я не хочу показывать. Я сделал очень простой пример, который, я надеюсь, поможет вам. Вам нужно будет настроить его на свои собственные данные, но нужные элементы должны быть там.

import matplotlib.pyplot as plt 
import numpy as np

myY=np.random.randint(20, size=10)
myX=np.arange(0,len(myY))

selected=[5,10,15]

fig = plt.figure()
for X,Y in zip(myX,myY):
    if Y in selected:
        mylabel="label = %s"%(Y); mycolor='blue'
    else:
        mylabel=None; mycolor='red'
    plt.scatter(X,Y,50, color=mycolor, label=mylabel)
plt.legend()
plt.show()

Это создает следующий график: enter image description here

Ответ 2

Это работает:

plt.plot(x, y, label='_nolegend_')

источник

Ответ 3

По какой-то причине оба ответа не работали для моей ситуации. Что работало и на самом деле было указано выше:

легенда также принимает список художников и список ярлыков, чтобы точно контролировать то, что входит в вашу легенду. tacaswell Jul 11 ​​'14 at 4:46

import pandas as pd
import matplotlib.pyplot as plt
import pylab

pd.Series(range(10)).plot(color = 'grey')
x = list(range(10))
y = [i + 1 for i in x]  
scat1 = plt.scatter(x, y)

pylab.legend([scat1],['moved points'], loc = 'upper left')

plt.show()

Результат кода: The result of the code:

Ответ 4

Вы также можете использовать пустую строковую переменную:

    plt.plot(xData, yData, ..., label=str())

Передав пустой объект str(), он ничего не записывает.

Справочник по Matplotlib API