2012-09-01 21 views
14

¿es posible cambiar dinámicamente el color de las barras en un script Gnuplot? tengo el siguiente scriptGnuplotte cambia el color de las barras en el histograma

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" 

que genera esta trama:

Generated plot

¿Es posible hacer que el color de las barras que están por debajo de cero roja?

Gracias,
Sven

+0

Es posible que desee buscar 'rgb variable' - agregando una tercera columna que especifica un" tipo de línea "verde o rojo dependiendo de si el valor es positivo o negativo. – mgilson

Respuesta

8

Puede imitar este comportamiento usando el estilo boxes:

Mi datos de prueba:

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

Y luego trazando 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

¡Parece una solución! –

2

no parece como histograma le permite hacerlo. Puede ser así:

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

se puede dividir el archivo de datos en dos partes, los valores positivos y negativos, y la trama de ellos por separado:

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" 

O, si sólo se necesita para generar unos gráficos , algunas veces, una técnica común es generar el gráfico en bruto en gnuplot, luego procesarlo en un editor de imágenes para ajustar los colores. Si vas por esa ruta, sugiero que gnuplot genere el gráfico en formato SVG, lo que te dará gráficos mucho mejores que cualquiera de los formatos de mapa de bits.

+0

Creo que intentaré posprocesar la trama. Buena idea, sin embargo! –

2

En realidad también se puede utilizar la variable LineColor rgb y dar el color de esta manera:

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