Afficher uniquement certains éléments dans legend Python Matplotlib

Je suis actuellement en train de tracer un graphique à barres empilées d'une grande quantité de données taxonomiques, et je souhaite seulement montrer des espèces significatives dans la légende (sur ~500 je souhaite montrer ~25). Est-il un moyen simple de faire cela? Ci-dessous le code que j'ai:

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)

Edit: essayé d'ajouter ceci pour afficher une seule entrée de légende, mais ne renvoie qu'une légende vide:

h, l = ax1.get_legend_handles_labels()
legend(l[4],h[4],ncol=2,loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0.)
28
demandé sur Broncos423 2014-07-10 19:50:12

3 réponses

J'insère souvent une étiquette vide pour les légendes que je ne veux pas montrer. J'ai fait un exemple extrêmement simple qui, je l'espère, vous aidera. Vous devrez ajuster cela à vos propres données, mais les éléments dont vous avez besoin devraient être là.

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()

Cela crée le tracé suivant: entrez la description de l'image ici

5
répondu Trond Kristiansen 2014-07-10 17:57:58

Cela fonctionne:

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

Source

88
répondu jlansey 2017-10-23 19:33:43

Pour une raison quelconque, les deux réponses n'ont pas fonctionné pour la situation de la mine. Ce qui a fonctionné, et en fait a été indiqué ci-dessus:

Légende prend également une liste d'artistes et une liste d'étiquettes pour contrôler précisément ce qui se passe dans votre légende – tacaswell Jul 11 '14 à 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()

Le résultat du code: Le résultat du code de:

3
répondu Andrey Selivanov 2017-03-19 18:36:14