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"
Điều này cần sed
và tăng gấp ba không gian tệp của bạn để gnuplot thấy mỗi dòng dưới dạng tập dữ liệu khác (hoặc "chỉ mục"). Bạn có thể vẽ riêng từng chỉ mục bằng cách sử dụng index <number>
hoặc i <number>
cho ngắn như tôi đã làm. Ngoài ra, số chỉ mục có sẵn là column(-2)
là cách chúng tôi nhận được các ô được đặt cách nhau đúng cách.
Có thể một hơi sạch hơn (gnuplot chỉ) giải pháp là sử dụng bộ lọc:
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"
Giải pháp này cũng không phụ thuộc vào bất kỳ đặt hàng đặc biệt trong datafile của bạn (đó là lý do tôi thích nó một chút để người kia giải pháp. Chúng tôi thực hiện khoảng cách ở đây với column(0)
(hoặc $0
) đó là con số kỷ lục trong tập dữ liệu (trong trường hợp này, số dòng).