使用CSV中的列作为类别标签,使用gnuplot绘制柱形图

时间:2018-02-08 13:02:43

标签: csv gnuplot stacked-chart

我的CSV文件如下:

frameNo dataSeg paritySeg   frameType
0   17  3   k
1   2   1   d
2   3   1   d
3   3   1   d
4   3   1   d
5   2   1   d
6   3   1   d
7   3   1   d
8   4   1   d

我能够绘制堆叠的柱状图,显示每帧的数据和奇偶校验段的数量。看起来像这样:

enter image description here

然而,我要添加的内容是对那些具有" k"的列(数据和奇偶校验)进行不同的绘制。最后一列中的标记。基本上,区分两个类别 - " d"和" k"。 这可能是使用gnuplot吗?

这是我使用的脚本:

set style histogram rowstacked; 
set style data histograms; 
set style fill solid; 
set datafile separator "\t";
set terminal png size 2500,1500 enhanced font ",30";
set title "";
set tics font ",25";
set xlabel "Frame #" font ",25";
set ylabel "# of segments" font ",25";
set key outside;
set xrange [0:];
plot "segments.csv" using 2 t "Data", "" using 3 t "Parity";'

1 个答案:

答案 0 :(得分:2)

如果不满足此条件,您可以对正在绘制的列强加自定义条件并提供无效值(发信号以跳过特定数据点):

set terminal pngcairo size 1200,600 enhanced font ",30";
set output 'test.png'

set style histogram rowstacked; 
set style data histograms; 
set style fill solid; 

#set datafile separator "\t";

set title "";
set tics font ",25";
set xlabel "Frame #" font ",25";
set ylabel "# of segments" font ",25";
set key outside;
set xrange [0:];

fName = 'segments.csv'

plot \
    fName using (strcol(4) eq 'd'?$2:1/0) t "Data d" lc rgb '#666666', \
    fName using (strcol(4) eq 'd'?$3:1/0) t "Parity d" lc rgb '#ff0000', \
    fName using (strcol(4) eq 'k'?$2:1/0) t "Data k" lc rgb '#000000', \
    fName using (strcol(4) eq 'k'?$3:1/0) t "Parity k" lc rgb '#990000' 

这会给出(使用你问题中的样本数据): enter image description here