2009-05-16 4 views
5

У меня есть точки доступа разных классов, которые я хочу визуализировать. Вот изображение, которое я получаю: http://imgur.com/1x97hMatplotlib: Обозначения не отображаются должным образом

Есть 3000 данных по 10 классам по 300 каждый. Они объединены в один массив d, чьи фрагменты я повторяю. Этикетки указаны в 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() 

Есть ли у кого-нибудь подсказка, почему моя легенда испортилась?

+0

Я правильно понимаю, что в легенде должно быть только 10 предметов? –

+0

Да, вы правы. – bayer

ответ

3

Это поможет создать автономный пример, возможно, с готовыми данными, чтобы люди могли сразу запустить его. Вот самодостаточный пример, модифицированный из того, что вы опубликовали, который отлично подходит для меня в ipython -pylab, с недавней версией svn Matplotlib; Я думаю, что некоторые ошибки, связанные с легендой, были исправлены в последнее время.

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

И вот что я получаю:

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

Предполагая, что ошибка связана с функцией автоматического легенды, вы можете быть в состоянии работать вокруг него, будучи явным о том, что вы хотите в Легенда:

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() 
Смежные вопросы