2012-01-31 6 views
9

Chciałbym narysować wyniki klasyfikacji i zaznaczyć prawdziwe klasy. Tak więc, w zasadzie potrzebuję przypisać kolor dla każdej podstawy punktu na wartości w kolumnie łańcuchowej.gnuplot: wykreślanie punktów z wartościami kolorystycznymi w jednej kolumnie

zbiór danych wygląda następująco:

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

skończyło się skryptu następujące rozwiązanie (dzięki odpowiedź tutaj: 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 

w oryginalnym zestawie danych zastąpiłem ciągi znaków liczbami, ponieważ nie wiem jak pracować z ciągami w gnuplot. Czy istnieje sposób na odwzorowanie łańcucha na kolory?

Obecnie wyjście wygląda następująco: gnuplot coloring points

Jednak nie lubię paletę gradientu, ponieważ nie ma sensu w tym przypadku. Wolałbym normalną legendę z jednym kolorem i nazwą klasy. Masz pomysł, jak to zrobić?

+0

mam to samo pytanie. Byłoby świetnie, gdyby paleta gnuplot akceptowała ciągi zamiast po prostu liczb całkowitych. Nie sądzę, żeby tak było. –

Odpowiedz

5

Sposób, w jaki można to zrobić, to: awk.

Korzystanie z pliku danych 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 

i ten skrypt:

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 

masz ten wykres:

enter image description here

Co awk nie jest po prostu sprawdzić trzecią Parametr pliku danych i tylko wydrukować e linia, jeśli ma jakąś wartość: jak czerwony lub niebieski.

Pozbędziesz się również palety z gradientem.

Scenariusz można jeszcze poprawić, używając gnuplot iterations.

+0

dziękuję, jestem całkiem nowy w gnuplot i składnia jest dla mnie dość myląca.używanie awk jest całkiem wygodne – Tombart

+0

@ Tombart Jeśli masz jakieś konkretne pytania dotyczące składni, której użyłem w tym przykładzie, daj mi znać, a ja to rozwiążę. – Woltan

+0

tutaj '$ 3' jest wartością trzeciej kolumny, ale nie określono czym jest ogranicznik? czy automatycznie zostanie przyjęty jako ''? – damned

2

Paleta kolorów może być wykorzystane, aby każdy punkt koloru (dla poszczególnych punktów)

plot file using 1:2:3 with points palette 

teraz ustawić paletę, który daje żądaną skalę kolorów. Możesz ustawić paletę, aby obliczyć kolor na przykład za pomocą modelu kolorów HSV lub zajrzyj na stronę demo gnuplot.

Tylko dla kompletności, rzucić okiem na ostatni przykład na 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