Matplotlib: легенда не отображается должным образом - PullRequest
5 голосов
/ 16 мая 2009

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

Есть 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()

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

1 Ответ

3 голосов
/ 16 мая 2009

Было бы полезно иметь автономный пример, возможно, с выдуманными данными, чтобы люди могли сразу его запустить. Вот автономный пример, модифицированный из того, что вы опубликовали, который отлично работает для меня в 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()

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

пример рисунка 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...