2012-09-01 10 views
14

è possibile modificare il colore delle barre in uno script Gnuplot in modo dinamico? Ho il seguente scriptGnuplot cambia il colore delle barre nell'istogramma

reset 
fontsize = 12 
set term postscript enhanced eps fontsize 
set output "bargraph_speedup.eps" 
set style fill solid 1.00 border 0 
set style histogram 
set style data histogram 
set xtics rotate by -45 
set grid ytics linestyle 1 
set xlabel "Benchmarks" font "bold" 
set ylabel "Relative execution time vs. reference implementation" font "bold" 
set datafile separator "," 
plot 'bm_speedup.dat' using 2:xtic(1) ti "Speedup" linecolor rgb "#00FF00" 

che genera questa trama:

Generated plot

E 'possibile rendere il colore delle barre che sono sotto lo zero rosso?

Grazie,
Sven

+0

Si potrebbe voler esaminare 'rgb variable' - aggiungendo una terza colonna che specifica un" tipo di linea "verde o uno rosso a seconda che il valore sia positivo o negativo. – mgilson

risposta

8

È possibile simulare questo comportamento utilizzando lo stile boxes:

miei dati di test:

zip 2 
baz 2 
bar -1 
cat 4 
foo -3 

E poi tracciando con gnuplot:

set style line 1 lt 1 lc rgb "green" 
set style line 2 lt 1 lc rgb "red" 
set style fill solid 
plot 'test.dat' u (column(0)):2:(0.5):($2>0?1:2):xtic(1) w boxes lc variable 
#     #xval:ydata:boxwidth:color_index:xtic_labels 
+0

Sembra una soluzione! –

2

non sembra istogramma consente di farlo. Può essere in questo modo:

set boxwidth 0.3 
f(v)=v<0?1:2 
plot 'bm_speedup.dat' using 0:2:(f($2)):xticlabels(1) with boxes ti "Speedup" lc variable 
3

Si potrebbe dividere il file di dati in due parti, valori positivi e negativi, e li tracciare separatamente:

plot 'bm_speedup_pos.dat' using 2:xtic(1) ti "Faster" linecolor rgb "#00FF00", \ 
    'bm_speedup_neg.dat' using 2:xtic(1) ti "Slower" linecolor rgb "#FF0000" 

Oppure, se avete solo bisogno di generare un paio di grafici , alcune volte, una tecnica comune è quella di generare il grafo crudo in gnuplot, quindi post-elaborarlo in un editor di immagini per regolare i colori. Se segui questa strada, ti suggerisco di fare in modo che gnuplot generi il grafico in formato SVG, che ti fornirà grafici molto più belli di tutti i formati bitmap.

+0

Penso che proverò a postelaborare la trama. Buona idea, però! –

2

In realtà si può anche usare variabile LineColor rgb e dare il colore in questo modo:

plot 'bm_speedup.dat' using 2:xtic(1):($2 >= 0 ? 0x00FF00 : 0xFF0000) ti Speedup lc rgb variable