2014-07-10 17 views
22

Attualmente sto tracciando un grafico a barre in pila di una grande quantità di dati tassonomici e desidero solo mostrare specie significative nella legenda (su ~ 500 desidero mostrare ~ 25). C'è un modo semplice per fare questo? Di seguito è riportato il codice che ho:Mostra solo determinati elementi nella legenda Python Matplotlib

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: provato ad aggiungere questo per mostrare solo una voce di legenda, ma restituisce solo una leggenda vuoto:

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

vuoi dire che si desidera tracciare tutte le 500 variabili, ma mostrano solo un selezionato 25 nella tua leggenda? – ThePredator

risposta

4

Spesso inserire un'etichetta vuota per leggende I don voglio mostrare Ho fatto un esempio estremamente semplice che spero ti possa aiutare. Dovrai modificare questo dato sui tuoi dati, ma gli elementi di cui hai bisogno dovrebbero essere 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() 

Questo crea la trama segue: enter image description here

+2

'legend' prende anche un elenco di artisti e un elenco di etichette per controllare con precisione ciò che entra nella tua leggenda – tacaswell

+0

Questo potrebbe funzionare, ma c'è un modo per essere selezionato per essere un elenco di stringhe delle voci della legenda che voglio? la mia trama è un grafico a barre in pila di molte voci. – Broncos423

+0

Sicuro. Per ciascuna voce (identificata da X, Y e nome) controlla se la tua voce corrente è in un elenco di etichette selezionate per la quale vuoi mostrare la legenda. È difficile mostrarti come farlo a meno che non mostri più informazioni su come appaiono i tuoi dati. –

53

Questo funziona:

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

source

+4

COSA?!? Funziona perfettamente ma è una soluzione così inaspettata :) – Owen

2

Per qualsiasi motivo entrambe le risposte non hanno funzionato per la situazione di mio. Che cosa ha funzionato, e in realtà è stato indicato sopra:

leggenda vuole anche un elenco di artisti e un elenco di etichette per controllare con precisione ciò che accade nella vostra leggenda - tacaswell 11 luglio '14 alle 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() 

il risultato del codice: The result of the code:

Problemi correlati