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"
Dzieje sed
i potrójne obowiązuje plik tak, że gnuplot widzi każdy wiersz jako innego zestawu danych (lub „index”). Możesz wykreślić każdy indeks osobno, używając index <number>
lub i <number>
krótko, jak to zrobiłem. Ponadto numer indeksu jest dostępny pod numerem column(-2)
, dzięki czemu otrzymujemy odpowiednio rozmieszczone pola.
Być może nieco bardziej czyste (tylko gnuplot) rozwiązaniem jest użycie filtrów:
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"
To rozwiązanie również nie zależy od konkretnego zamawiającego w Twoim pliku danych (dlatego wolę go lekko do drugiej rozwiązaniem. Realizujemy odstępy tutaj z column(0)
(lub $0
), który to numer rekordu w zbiorze danych (w tym przypadku liczba linii).