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

如何在gnuplot中的条顶上获取标签,gnuplot,Gnuplot,我想要一个条形图,上面有标签,显示一组带有错误的条形图,并且在条形图顶部有标签,指示此条形图与第一个条形图的差异有多大。虽然我的定位正确,但总是有点偏离。Y看起来是正确的,即使有很大的误差,但是x的位置只有在中间条(蓝色C)上是绝对正确的,所有左边的条看起来有点偏左,所有右边的条看起来有点偏右。此外,条数越多,不需要的偏移量就越大。我的位置计算有错误吗?有更好的方法吗 我使用这段代码定位标签: with labels center offset first (1 + (i - (configur

我想要一个条形图,上面有标签,显示一组带有错误的条形图,并且在条形图顶部有标签,指示此条形图与第一个条形图的差异有多大。虽然我的定位正确,但总是有点偏离。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 ($0 - 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

boxwidth以及每个框的位置由
配置的数量
加上两个簇之间的间隙大小给出,在您的例子中是
1
。并且,除了将x位置放在
offset
参数中之外,您还可以使用
语句将其移动到
。使用
设置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