2009-05-16 11 views
5

Ho punti dati di classi diverse che desidero visualizzare. Ecco l'immagine che ottengo: http://imgur.com/1x97hMatlota: legenda non visualizzata correttamente

Ci sono 3000 datapoints di 10 classi, 300 ciascuna. Sono concatenati in un singolo array d sui cui blocchi I itate. Le etichette sono fornite in labels.

pylab.clf() 
colors = (i + j for j in 'o<.' for i in 'bgrcmyk') 
for l, c in zip(labels, colors): 
    start, stop = i * 300, (i + 1) * 300 
    pylab.plot(d[0, start:stop], d[1, start:stop], c, label=l) 

pylab.legend(loc='lower left') 
pylab.show() 

Qualcuno ha idea del perché la mia leggenda è incasinata?

+0

Sto comprendendo correttamente che ci devono essere solo 10 elementi elencati nella legenda? –

+0

Sì, hai ragione. – bayer

risposta

3

Sarebbe utile avere un esempio autonomo, possibilmente con dati inventati, in modo che le persone possano eseguirlo immediatamente. Ecco un esempio autonomo modificato da ciò che hai pubblicato che funziona bene per me in ipython -pylab, con una recente revisione svn di Matplotlib; Penso che alcuni bug relativi alle leggende siano stati risolti di recente.

colors = (i + j for j in 'o<.' for i in 'bgrcmyk') 
labels = 'one two three four five six seven eight nine ten'.split() 
x = linspace(0, 2*pi, 3000) 
d = (2+random((2,3000))) * c_[sin(x), cos(x)].T 
for i, l, c in zip(range(10), labels, colors): 
    start, stop = i * 300, (i + 1) * 300 
    plot(d[0, start:stop], d[1, start:stop], c, label=l) 
legend(loc='lower left') 
show() 

ed ecco cosa ottengo:

example figure http://www.iki.fi/jks/tmp/legend.png

Supponendo che il bug è legato alla funzione di auto-leggenda, si potrebbe essere in grado di lavorare intorno ad esso per essere esplicito su ciò che si desidera in la legenda:

colors = (i + j for j in 'o<.' for i in 'bgrcmyk') 
labels = 'one two three four five six seven eight nine ten'.split() 
x = linspace(0, 2*pi, 3000) 
d = (2+random((2,3000))) * c_[sin(x), cos(x)].T 
lg = [] 
for i, l, c in zip(range(10), labels, colors): 
    start, stop = i * 300, (i + 1) * 300 
    handle = plot(d[0, start:stop], d[1, start:stop], c, label=l) 
    lg.append(handle) 
legend(lg, labels, loc='lower left') 
show() 
Problemi correlati