set xrange [-.5:3.5]
set yrange [0:]
set style fill solid
plot "<sed 'G;G' test.dat" i 0 u (column(-2)):2:xtic(1) w boxes ti "Critical" lc rgb "black",\
"<sed 'G;G' test.dat" i 1 u (column(-2)):2:xtic(1) w boxes ti "High" lc rgb "red" ,\
"<sed 'G;G' test.dat" i 2 u (column(-2)):2:xtic(1) w boxes ti "Medium" lc rgb "green",\
"<sed 'G;G' test.dat" i 3 u (column(-2)):2:xtic(1) w boxes ti "Low" lc rgb "blue"
Esto toma sed
y triples espacios de su archivo para que gnuplot ve cada línea como un conjunto de datos diferente (o "índice"). Puede trazar cada índice por separado usando index <number>
o i <number>
para abreviar como lo he hecho. Además, el número de índice está disponible como column(-2)
, que es la forma en que obtenemos las casillas espaciadas correctamente.
Posiblemente un (sólo gnuplot) solución ligeramente más limpia está utilizando filtros:
set xrange [-.5:3.5]
set yrange [0:]
set style fill solid
CRITROW(x,y)=(x eq "Critical") ? y:1/0
HIGHROW(x,y)=(x eq "High") ? y:1/0
MIDROW(x,y) =(x eq "Medium") ? y:1/0
LOWROW(x,y) =(x eq "Low") ? y:1/0
plot 'test.dat' u ($0):(CRITROW(stringcolumn(1),$2)):xtic(1) w boxes lc rgb "black" ti "Critical" ,\
'' u ($0):(HIGHROW(stringcolumn(1),$2)):xtic(1) w boxes lc rgb "red" ti "High" ,\
'' u ($0):(MIDROW(stringcolumn(1),$2)):xtic(1) w boxes lc rgb "green" ti "Medium" ,\
'' u ($0):(LOWROW(stringcolumn(1),$2)):xtic(1) w boxes lc rgb "blue" ti "Low"
Esta solución también no depende de ningún orden particular en su archivo de datos (que es por eso que prefiero un poco hacia la otra solución. Llevamos a cabo la separación aquí con column(0)
(o $0
) que es el número de registro en el conjunto de datos (en este caso, el número de línea).