2013-02-21 16 views
5

Ho un file con quattro colonne di dati. Sto usando solo i primi tre per tracciare una trama 3D e non ho bisogno della quarta in questo momento.Utilizzo di Gnuplot per tracciare i colori dei punti in modo condizionale

Desidero sapere come modificare il colore di un punto se soddisfa determinate condizioni. Ad esempio, se i valori di un punto (x, y, z) sono superiori (16,400,65), voglio tracciare in grigio. Se sono minori, voglio usare il rosso.

Sto cercando di utilizzare lo awk per lo stesso e traccia solo due punti di un colore diverso. Ecco il mio codice.

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" 

mio file di dati aspetto:

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 

asse X varia da 6 a 22.

intervalli dell'asse Y da 0 a 500.

gamme asse Z da 35 a 85.

Mi piacerebbe visualizzare questo come avere un riquadro di delimitazione intorno a (16,400,65) in modo tridimensionale. Qualsiasi cosa all'interno della scatola è rossa, qualsiasi cosa all'esterno è grigia.

Spero che qualcuno possa aiutarmi qui.

P.S: I punti blu stanno stampando bene e anche se qui i dati di esempio non mostrano alcune condizioni soddisfatte, ci sono punti che soddisfano tale condizione. Non ho pubblicato l'intero file qui.

+0

caso uguaglianza:.. http://stackoverflow.com/questions/8717805/ variare-point-colore-in-gnuplot-ba sed-on-value-of-one-column –

risposta

5

È possibile ridurre lo sforzo awk un po 'e lo fa in puro gnuplot definendo una semplice funzione:

#!/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' 

(Le linee di impostazione della gamma e la disattivazione del colorbox, così come i comandi di due plot in più, sono solo per rendere le cose abbastanza a mio parere dà una chiave che descrive il significato dei due colori senza la distrazione colorbox)

enter image description here

+1

Grazie mille. – adwaraki

+0

Un'altra domanda veloce. Supponiamo che io abbia due file, entrambi come quello descritto sopra. Uno contiene i dati sull'ottimalità e quello che ti ho mostrato contiene dati non ottimali/non ottimali. Il mio obiettivo è di tracciare entrambi sulla stessa trama, anche se quelli non ottimali che cadono fuori dal riquadro di delimitazione in grigio, quelli non ottimali all'interno della scatola in punti rossi (questi due sono in un file) e i punti ottimali in impulsi blu (questi sono nell'altro file). In questo momento, se provo a tracciare i punti ottimali sullo stesso grafico, tutti i punti diventano grigi. Qualsiasi suggerimento per favore? – adwaraki

+0

Sembra che tu abbia un problema leggermente diverso qui e ti consiglio di postarlo come una nuova domanda, con script di esempio e dati allegati che riproducono il problema. In questo momento sospetto che la palette sia il problema, ma non ne sono sicuro. Inoltre sembra che tu sia nuovo di SO, quindi vorrei dire che se ti piace una risposta è cortesia comune di upvote e accettarlo :) – andyras

Problemi correlati