Estoy empezando con la pila scipy
. Estoy usando el conjunto de datos del iris, en una versión CSV. Puedo cargarlo bien usando:Pylab: asignar etiquetas a los colores
iris=numpy.recfromcsv("iris.csv")
y la trama que:
pylab.scatter(iris.field(0), iris.field(1))
pylab.show()
Ahora me gustaría trazar las clases, que se almacenan en iris.field(4)
:
chararray(['setosa', ...], dtype='|S10')
¿Cuál es una manera elegante de asignar estas cadenas a los colores para trazar? scatter(iris.field(0), iris.field(1), c=iris.field(4))
no funciona (de los documentos espera valores flotantes o un mapa de colores). No he encontrado una manera elegante de generar automáticamente un mapa de color.
cols = {"versicolor": "blue", "virginica": "green", "setosa": "red"}
scatter(iris.field(0), iris.field(1), c=map(lambda x:cols[x], iris.field(4)))
hace aproximadamente lo que quiero, pero no me gusta demasiado la especificación de color manual.
Edición: versión ligeramente más elegante de la última línea:
scatter(iris.field(0), iris.field(1), c=map(cols.get, iris.field(4)))
Gracias. Vi la opción de trazado múltiple, pero aún no sabía el elegante truco de condición que usaste aquí (+1). Tengo que estar en desacuerdo sobre 'scatter'. A mi entender, es exactamente para este tipo de tramas, donde los puntos son independientes y no están conectados (que se trabaja mediante el establecimiento de 'linestyle =" none "') –
El punto 'plot' vs' scatter' es un desafortunado y Malentendido común. Usa 'plot' para trazar puntos, y usa' scatter' para trazar cosas cuando necesites variar continuamente el tamaño y/o el color de los marcadores basados en una tercera o cuarta variable. 'scatter' devuelve una colección que es mucho más difícil de administrar. 'plot' _really is_ pretende trazar puntos desconectados, el valor predeterminado simplemente es una línea. Si quieres una llamada más concisa, 'plt.plot (x, y, 'o')' hará lo mismo que 'plt.plot (x, y, linestyle = 'none', marker = 'o')' . –
Gracias. Yo uso 'np.unique (iris.field (4))' (ya que mi CSV no tiene una fila de etiqueta de columna). Pero aparte de eso, ahora esencialmente estoy usando tu código. Me gusta mucho el truco de la condición. –