Sto appena iniziando con lo stack scipy
. Sto usando il set di dati dell'iride, in una versione CSV. Posso caricarlo bene con:Pylab: mappare le etichette sui colori
iris=numpy.recfromcsv("iris.csv")
e tracciarla:
pylab.scatter(iris.field(0), iris.field(1))
pylab.show()
Ora vorrei tracciare anche le classi, che sono immagazzinati in iris.field(4)
:
chararray(['setosa', ...], dtype='|S10')
Qual è un modo elegante per mappare queste stringhe a colori per la stampa? scatter(iris.field(0), iris.field(1), c=iris.field(4))
non funziona (dai documenti si aspetta valori float o una mappa di colori). Non ho trovato un modo elegante per generare automaticamente una mappa dei colori.
fa approssimativamente quello che voglio, ma non mi piace troppo le specifiche del colore manuale.
Edit: un po 'la versione più elegante dell'ultima riga:
scatter(iris.field(0), iris.field(1), c=map(cols.get, iris.field(4)))
Grazie. Ho visto l'opzione del plottaggio multiplo, ma non ero ancora a conoscenza dell'elegante trucco di condizione che hai usato qui (+1). Non sono d'accordo su 'scatter'. A mio modo di vedere, è esattamente inteso per questo tipo di trame, dove i punti sono indipendenti e non connessi (che si aggira impostando 'linestyle =" none "') –
Il punto 'plot' vs' scatter' è uno sfortunato e malinteso comune. Usa 'trama' per tracciare i punti, e usa solo' scatter' per tracciare le cose quando hai bisogno di variare continuamente le dimensioni e/o il colore dei marcatori in base a una 3a o 4a variabile. 'scatter' restituisce una collezione che è molto più difficile da gestire. 'plot' _really is_ ha lo scopo di tracciare punti disconnessi, l'impostazione predefinita è una linea. Se vuoi una chiamata più concisa, 'plt.plot (x, y, 'o')' farà la stessa cosa di 'plt.plot (x, y, linestyle = 'none', marker = 'o')' . –
Grazie. Io uso 'np.unique (iris.field (4))' (dato che il mio CSV non ha una riga di etichetta di colum). Ma a parte questo, ora sto usando essenzialmente il tuo codice. Mi piace molto il trucco delle condizioni. –