Gnuplot使用错误栏列出了直方图

时间:2015-10-08 17:44:00

标签: gnuplot histogram errorbar

假设我有以下数据文件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

产生

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

是否可以组合列堆积直方图和误差线?

1 个答案:

答案 0 :(得分:2)

您可以通过手动为错误栏添加plot-commands,将错误栏添加到列堆积的直方图中。但是,要这样做,您需要跟踪y位置。

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

y1 = -2
y2 = -4

您需要使用-(number of column)初始化这些变量 接下来,让我们定义两个更新变量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 ""

enter image description here

如您所见,您可以通过指定空标题(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)

enter image description here