2010-07-21 8 views
3

Je suis en train d'écrire un script qui contient plusieurs points. J'essaie aussi de créer une légende à partir de ces points. Pour résumer mon scénario, je suis en train de tracer plusieurs 'types' de points (les appeler 'a', 'b', 'c'). Ces points ont des couleurs et des formes différentes: 'a' - 'go' 'b' - 'rh' 'c' - 'k ^'.Aide de légende Matplotlib

Ceci est une version abrégée des parties pertinentes de mon script:

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

Ce que je fais ici est juste complote un tas de points et de les attribuer une étiquette. Cependant, j'ai découvert que si j'ajoutais une étiquette à chaque point, alors la légende contiendra une entrée pour chaque point. Je veux seulement une entrée par type de point (a, b, c). Donc, j'ai changé mon script pour ressembler à ce qui précède. Y a-t-il une meilleure manière de faire cela? Si j'ai un million de types de points différents, la structure de données LABELS (un ensemble) prendra beaucoup de place.

Répondre

2

Groupe x et y selon le type de point. Plot tous les points du même type avec un appel à 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