web-dev-qa-db-fra.com

Afficher uniquement certains éléments de la légende Python Matplotlib

Je suis en train de tracer un graphique à barres empilées d'une grande quantité de données taxonomiques et ne souhaite que montrer des espèces significatives dans la légende (sur ~ 500, je souhaite montrer ~ 25). Y a-t-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.)
38
Funsaized

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 modifier cela en fonction de 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 l'intrigue suivante: enter image description here

8
Trond Kristiansen

Cela marche:

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

la source

113
jlansey

Pour une raison quelconque, les deux réponses ne fonctionnaient pas dans le cas de la mine. Ce qui a fonctionné et qui a été indiqué ci-dessus: 

la légende prend également une liste d'artistes et une liste de labels pour contrôler précisément ce qui se trouve dans votre légende

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: The result of the code:

4
Andrey Selivanov

Vous pouvez également utiliser une variable de chaîne vide:

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

En passant un objet vide str (), il n’écrit rien. 

Référence de l'API Matplotlib

0