2012-01-31 16 views
9

Me gustaría trazar los resultados de la clasificación y marcar clases verdaderas. Entonces, básicamente lo que necesito es asignar un color para cada base de puntos en el valor en una columna de cadena.gnuplot: trazado de puntos con valores basados ​​en color en una columna

conjunto de datos es el siguiente:

5,1 3,5 1,4 0,2 Iris-setosa

que terminó con la escritura siguiente solución (gracias a la respuesta aquí: How to make points one color when a third column equals zero, and another color otherwise, in Gnuplot?)

set palette model RGB defined (0 "red",1 "blue", 2 "green") 
plot 'iris.data' using 1:2:5 notitle with points pt 2 palette 

en el conjunto de datos original Reemplacé las etiquetas de cadena con números, porque no sé cómo trabajar con cadenas en gnuplot. ¿Hay alguna manera de mapear la cadena a los colores?

Actualmente la salida tiene el siguiente aspecto: gnuplot coloring points

Sin embargo no me gusta la paleta de gradiente, ya que no tiene sentido en este caso. Preferiría la leyenda normal con un solo color y el nombre de la clase. ¿Alguna idea de cómo hacerlo?

+0

que tienen la misma pregunta. Sería genial si la paleta gnuplot aceptara cadenas en lugar de enteros. No creo que lo haga –

Respuesta

5

Una manera de cómo hacerlo es usando awk.

El uso de un archivo de datos Data.csv:

5.4452 4.6816 blue 
1.2079 9.4082 red 
7.4732 6.5507 red 
2.3329 8.2996 red 
3.4535 2.1937 green 
1.7909 2.5173 green 
2.5383 7.9700 blue 

y este guión:

set pointsize 3 
plot "< awk '{if($3 == \"red\") print}' Data.csv" u 1:2 t "red" w p pt 2, \ 
    "< awk '{if($3 == \"green\") print}' Data.csv" u 1:2 t "green" w p pt 2, \ 
    "< awk '{if($3 == \"blue\") print}' Data.csv" u 1:2 t "blue" w p pt 2 

que presentamos lo mejor esta trama:

enter image description here

Lo awk no es simplemente marque la tercera parámetro del archivo de datos y solo imprimir th línea si tiene algún valor: como rojo o azul.

También se deshace de la paleta con el degradado.

La secuencia de comandos podría mejorarse aún más mediante el uso de gnuplot iterations.

+0

gracias, soy bastante nuevo para gnuplot y la sintaxis es bastante confusa para mí.usar awk es bastante conveniente – Tombart

+0

@Tombart Si tiene alguna pregunta específica sobre la sintaxis que utilicé en el ejemplo, hágamelo saber y lo explicaré más detalladamente. – Woltan

+0

aquí el '$ 3' es el valor de la tercera columna pero no especifica qué es el delimitador? ¿se tomará automáticamente como ''? – damned

2

Una paleta de colores se puede utilizar para obtener cualquier color punto (para los puntos individuales)

plot file using 1:2:3 with points palette 

Ahora configurar una paleta que le da la escala de colores deseada. Puede configurar la paleta para calcular el color, por ejemplo, utilizando el modelo de color HSV o echar un vistazo al sitio web de demostraciones de gnuplot.

simplemente para la corrección, echar un vistazo a la última ejemplo en gnuplot pm3d colors demo page:

color bar with distinct colors in gnuplot

theta(x) = x<0 ? 0 : 1 
r(x) = 4*x*(1-theta(x-0.25)) 
g(x) = 0.5*theta(x-0.25)*(1-theta(x-0.5)) 
b(x) = x 
set palette model RGB functions r(gray),g(gray),b(gray) 
set title "set palette model RGB functions\n4*x*(1-theta(x-0.25)), 0.5*theta(x-0.25)*(1-theta(x-0.5)), x" 
splot f(x)enter code here 
Cuestiones relacionadas