1

假设我有以下数据文件so-qn.dat

Type   on on-err off off-err
good   75 5      55  4
bad    15 2      30  3
#other 10 1      15  2

其中包含第 2 列和第 4 列的值以及第 3 列和第 5 列的相应错误增量。

我可以生成一个列堆叠直方图:

#!/usr/bin/gnuplot
set terminal png
set output 'so-qn.png'
set linetype 1 lc rgb "blue" lw 2 pt 0
set linetype 2 lc rgb "dark-red" lw 2 pt 0
set style data histograms
set style histogram columnstacked
set style fill solid
set ylabel "% of all items"
set yrange [0:100]
set boxwidth 0.75
set xtics scale 0
set xlabel "Option"
plot 'so-qn.dat' using 2 ti col, \
              '' using 4:key(1) ti col

但我不知道如何为此添加错误栏。到目前为止我最接近的是

plot 'so-qn.dat' using 2 ti col, '' using 2:3 with yerrorbars lc rgb 'black' ti col, \
              '' using 4:key(1) ti col, '' using 4:5:key(1) with yerrorbars lc rgb 'black' ti col

产生

但是只有一个误差线在正确的位置(我实际上不知道左下角的 y 从哪里得到),一个是完全不可见的(隐藏在右堆栈后面?),我想要误差线不显示在密钥中。

是否可以结合列堆叠直方图和误差线?

4

1 回答 1

2

您可以通过手动添加错误栏的绘图命令来将错误栏添加到列堆叠直方图中。但是,为此,您需要跟踪 y 位置。

因此,让我们引入两个变量来存储两列误差线中每一个的 y 位置。

y1 = -2
y2 = -4

您需要使用-(number of column) Next 初始化这些变量,让我们定义两个更新变量的函数y1, y2

f1(x) = (y1 = y1+x)
f2(x) = (y2 = y2+x)

现在,通过

plot 'so-qn.dat' using 2 ti col, \
              '' using 4:key(1) ti col, \
              '' using (0):(f1($2)):3 w yerr t "", \
              '' using (1):(f2($4)):5 w yerr t ""

在此处输入图像描述

如您所见,您可以通过分配一个空标题 ( t "") 来抑制键中的错误栏。这种方法甚至可以让您更灵活地自定义错误栏的外观(例如,分配不同的线型等)。

话虽这么说,我个人认为这种可视化相当令人困惑。您可能需要考虑另一种可视化:

set bars fullwidth 0
set style data histograms
set style fill solid 1 border lt -1
set style histogram errorbars gap 2 lw 2
plot 'so-qn.dat' using 2:3:xtic(1) ti columnhead(2), \
    '' using 4:5:xtic(1) ti columnhead(4)

在此处输入图像描述

于 2015-10-16T07:49:48.670 回答