Помощь легенды Matplotlib - PullRequest
3 голосов
/ 21 июля 2010

Я пишу сценарий, который излагает несколько пунктов.Я также пытаюсь создать легенду из этих пунктов.Подводя итог моему сценарию, я рисую несколько «типов» точек (назовите их «a», «b», «c»).Эти точки имеют разные цвета и формы: 'a' - 'go' 'b' - 'rh' 'c' - 'k ^'.

Это сокращенная версия соответствующих частей моего сценария:

lbl = #the type of point x,y is (a,b,c)
for x,y in coords:
   if lbl in LABELS:
      plot(x, y, color)
   else:
      LABELS.add(lbl)
      plot(x, y, color, label=lbl)
 legend()

То, что я делаю здесь, это просто нанесение набора точек и присвоение им метки.Однако я узнал, что если я добавлю метку к каждой точке, то легенда будет содержать запись для каждой точки.Я хочу только одну запись для каждого типа точек (a, b, c).Итак, я изменил свой сценарий, чтобы выглядеть как выше.Есть лучший способ сделать это?Если у меня есть миллион различных типов точек, то структура данных LABELS (набор) займет много места.

1 Ответ

2 голосов
/ 21 июля 2010

Группа x и y в зависимости от типа точки. Нанесите все точки одного типа за один звонок на plot:

import pylab
import numpy as np

lbl=np.array(('a','b','c','c','b','a','b','c','a','c'))
x=np.random.random(10)
y=np.random.random(10)
for t,color in zip(('a','b','c'),('go','rh','k^')):
    pylab.plot(x[lbl==t],y[lbl==t],color,label=t)
pylab.legend()
pylab.show()

alt text

...