私は非常に単純なデータセットを持っています:
Critical 2
High 18
Medium 5
Low 14
このデータセットからgnuplotで棒グラフを作成するのは簡単ですが、すべての棒は同じ色です。クリティカルが黒、ハイが赤などになるようにしたいのですが、これを行うためのオンラインチュートリアルはほとんどないようです。
誰かが私を正しい方向に向けることができますか?
私は非常に単純なデータセットを持っています:
Critical 2
High 18
Medium 5
Low 14
このデータセットからgnuplotで棒グラフを作成するのは簡単ですが、すべての棒は同じ色です。クリティカルが黒、ハイが赤などになるようにしたいのですが、これを行うためのオンラインチュートリアルはほとんどないようです。
誰かが私を正しい方向に向けることができますか?
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"
sed
gnuplot が各行を異なるデータセット (または「インデックス」) として認識するように、これはファイルのスペースを 3 つ取ります。index <number>
私が行ったように、またはを使用して、各インデックスを個別にプロットできますi <number>
。また、インデックス番号はcolumn(-2)
、ボックスを適切な間隔で配置する方法として利用できます。
おそらくもう少しクリーンな (gnuplot のみ) ソリューションはフィルターを使用しています:
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"
このソリューションは、データファイル内の特定の順序にも依存しません (これが、私が他のソリューションよりも少し好む理由です。ここでは、データセット内のレコード番号であるcolumn(0)
(または$0
) を使用して間隔を設定します (この場合、行番号)。