如何在 gnuplot 中的条形顶部获取标签

How to get labels on top of bars in gnuplot

我想要一个条形图,条形图顶部有标签,显示一组条形图,有错误,条形图顶部的标签指示该条形图与第一个条形图的不同程度。虽然我得到了正确的定位,但它总是有点偏离。 Y 似乎是正确的,即使有很大的错误,但 x 位置仅在中间条(蓝色 C)上绝对正确,所有左侧的条似乎都偏左,而右侧的所有条似乎都偏右。此外,条形越多,不需要的偏移就越大。我的位置计算有误吗?有更好的方法吗?

我使用这段代码来定位标签:

with labels center offset first (1 + (i - (configurations-1) / 2.0) / (configurations))

我正在发布一个示例脚本和数据文件,以及在此处显示该图的结果图:(第二个 for 循环末尾的代码控制标签的位置:

剧情:

脚本test.gnuplot:

reset
set terminal png size 500,300
set autoscale
set yrange [0:]
set style data histogram
set style histogram cluster gap 1 errorbars
set style fill solid border -1
set key inside right top vertical 
set key autotitle columnheader 
set boxwidth 0.9
configurations=5
plot for[i=0:(configurations-1):1] 'test.data' using 2+i*3:2+i*3+1:2+i*3+2:xtic(1) title col, for[i=1:(configurations-1):1] '' using ([=11=] - 1):2+i*3+2:(gprintf("%+-.0f%%", (column(2+i*3+0)/column(2+0*3+0)-1) * 100)) with labels center offset first (1 + (i - (configurations-1) / 2.0) / (configurations)), character 0.5 notitle
quit

数据文件test.data:

"" A A A B B B C C C D D D E E E
"Foo" 5.8058873543 5.7058873543 5.9058873543 5.6901595056 5.3101595056 6.2901595056 8.09519137 8.00519137 8.10519137 7.3446561007 7.2446561007 7.4446561007 9.2118493572 9.0118493572 9.3118493572

框宽,因此每个框的位置也由 configurations 的数量加上两个簇之间的间隙大小给出,在您的情况下为 1。而且,除了将 x 位置放在 offset 参数中,您还可以将其移动到 using 语句中。使用set xrange限制左右两边的空隙:

set style histogram cluster gap 1 errorbars
set style fill solid border -1
set key inside right top vertical 
set key autotitle columnheader 
set boxwidth 0.9 absolute
configurations=5
set xrange [-0.5:0.7]
plot for[i=0:(configurations-1):1] 'test.data' using 2+i*3:2+i*3+1:2+i*3+2:xtic(1) title col, \
     for[i=1:(configurations-1):1] '' using ((i - (configurations-1) / 2.0) / (configurations + 1)):2+i*3+2:(gprintf("%+-.0f%%", (column(2+i*3+0)/column(2+0*3+0)-1) * 100)) with labels center offset 0, character 0.5 notitle