2013-02-21 8 views
5

Mam plik z czterema kolumnami danych. Używam tylko pierwszych trzech do wykreślenia wykresu 3D i nie potrzebuję teraz czwartego.Używanie Gnuplot do rysowania kolorów warunkowych warunkowo

Chcę wiedzieć, jak zmienić kolor punktu, jeśli spełnia on określone warunki. Na przykład, jeśli wartość punktu za (x, y, z) są większe niż (16,400,65), chcę wykreślić go na szaro. Jeśli są mniejsze, chcę użyć czerwonego.

Próbuję użyć awk dla tego samego i to tylko dwa punkty w innym kolorze. Oto mój kod.

gnuplot>splot "< awk '{if(($2 > \"16\") || ($1 > \"400\") || ($3 > \"65\")) print}'          
./8_77_non_pareto_data.dat " u 2:1:3 w p pt 8 lc rgb "grey", \ 
"< awk '{if(($2 < \"16\") || ($1 < \"400\") || ($3 < \"65\")) print}' 
./8_77_non_pareto_data.dat " u 2:1:3 w p pt 8 lc rgb "red", \ 
"./8_77_pareto_data.dat" u 2:1:3 w i lt 1 lc rgb "blue" t "Pareto points" 

Mój plik danych wygląda następująco:

48  15.057599573464184  68  361 
93  14.950459657063462  73  361 
48  14.065204842090914  69  361 
280  13.16320458043516  69  361 
120  15.05281009307949  66  361 
48  15.133322961840786  59  361 
48  16.161631503473544  73  361 
470  17.763180586730847  77  361 

osi X wynosi od 6 do 22.

zakresy osi Y od 0 do 500.

zakresach oś od 35 do 85.

Chciałbym wizualizować to jako posiadające ramkę ograniczającą wokół (16,400,65) w trójwymiarowy sposób. Wszystko w pudełku jest czerwone, wszystko poza nim jest szare.

Mam nadzieję, że ktoś mi w tym pomoże.

P.S: Niebieskie punkty drukują się dobrze i chociaż przykładowe dane tutaj nie pokazują spełnienia niektórych warunków, istnieją punkty, które spełniają ten warunek. Nie wysłałem tutaj całego pliku.

+0

przypadek równość:.. http://stackoverflow.com/questions/8717805/ różnią się kolorami-punkt-w-gnuplot-ba sed-on-value-of-one-column –

Odpowiedz

5

Można zmniejszyć wysiłek awk trochę i zrobić to w czystej gnuplot definiując prostą funkcję:

#!/usr/bin/env gnuplot 

set terminal png set output 'test.png' 

bigx = 16; bigy = 400; bigz = 65 

isbig(x,y,z) = (x > bigx || y > bigy || z > bigz) ? 1 : 0 

set palette defined (0 0.5 0.5 0.5, 1 1 0 0) # (grey, red) 

unset colorbox 
set xrange [0:20]; set yrange [0:500]; set zrange [0:100] 

splot 'data.dat' using 2:1:3:(isbig($2,$1,$3)) with points pt 7 palette notitle, \ 
     '' using (1e6):1:1 with points pt 7 lc rgb '#888888' title 'in box', \ 
     '' using (1e6):1:1 with points pt 7 lc rgb 'red' title 'not in box' 

(Linie ustalania zakresu i wyłączające ColorBox, jak również poleceń dwie dodatkowe działki, to tylko, aby rzeczy całkiem moim zdaniem daje to klucz, który opisuje co dwa kolory znaczy bez rozpraszających ColorBox)

enter image description here

+1

Dziękuję bardzo. – adwaraki

+0

Kolejne szybkie pytanie. Załóżmy, że mam dwa pliki, oba takie jak opisany powyżej. Jeden zawiera dane optymalności, a ten, który pokazałem, zawiera dane nieoptymalne/suboptymalne. Moim celem jest drukowanie zarówno na tej samej działce, aczkolwiek te nieoptymalne, które wypadają poza obwiednią w kolorze szarym, te nieoptymalne wewnątrz pudełka w czerwonych punktach (te dwa są w jednym pliku) i optymalne punkty w niebieskie impulsy (znajdują się w drugim pliku). Teraz, jeśli spróbuję narysować optymalne punkty na tej samej działce, wszystkie punkty zmieniają się na szare. Jakieś wskazówki, proszę? – adwaraki

+0

Wygląda na to, że masz tu nieco inny problem i zalecam opublikowanie go jako nowego pytania, z przykładowym skryptem i dołączonymi danymi, które odwzorowują problem. W tej chwili podejrzewam, że paleta jest problemem, ale nie jestem pewien. Wygląda na to, że jesteś nowy w SO, więc chciałbym wspomnieć, że jeśli lubisz odpowiedzi, to powszechna uprzejmość, aby przegłosować, a także zaakceptować to :) – andyras

Powiązane problemy