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

Use column from CSV as a category label for plotting column chart using gnuplot

我有一个 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

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

然而,我想添加的是,在最后一列中具有 "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";'

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

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'?:1/0) t "Data d" lc rgb '#666666', \
    fName using (strcol(4) eq 'd'?:1/0) t "Parity d" lc rgb '#ff0000', \
    fName using (strcol(4) eq 'k'?:1/0) t "Data k" lc rgb '#000000', \
    fName using (strcol(4) eq 'k'?:1/0) t "Parity k" lc rgb '#990000' 

这将给出(使用您问题中的示例数据):