Gnuplot columnstacked histogram with errorbars
Gnuplot columnstacked histogram with errorbars
假设我有以下数据文件,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 从哪里来),一个完全不可见(隐藏在右侧堆栈后面?),而且我'我希望错误栏不显示在密钥中。
是否可以组合列堆叠直方图和误差线?
您可以通过手动为误差条添加 plot-commands 来将误差条添加到 column-stacked 直方图。但是,为此,您需要跟踪 y-positions.
因此,让我们引入两个变量,分别为两列的误差线存储 y-position。
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()):3 w yerr t "", \
'' using (1):(f2()):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)
假设我有以下数据文件,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 从哪里来),一个完全不可见(隐藏在右侧堆栈后面?),而且我'我希望错误栏不显示在密钥中。
是否可以组合列堆叠直方图和误差线?
您可以通过手动为误差条添加 plot-commands 来将误差条添加到 column-stacked 直方图。但是,为此,您需要跟踪 y-positions.
因此,让我们引入两个变量,分别为两列的误差线存储 y-position。
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()):3 w yerr t "", \
'' using (1):(f2()):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)