Gnuplot-当使用直方图样式时,如何在条形图上方放置y值?

Gnuplot-当使用直方图样式时,如何在条形图上方放置y值?,gnuplot,histogram,Gnuplot,Histogram,我目前正在使用脚本生成直方图图,例如: set style histogram cluster gap 4 plot for [COL=2:10] 'example.dat' u COL:xticlabels(1) title columnheader(COL) 现在,我希望在直方图中的条形上方添加y值(数字),但添加w标签会出现“此样式的列不够”错误 plot for [COL=2:10] 'example.dat' u COL:xticlabels(1) title columnheade

我目前正在使用脚本生成直方图图,例如:

set style histogram cluster gap 4
plot for [COL=2:10] 'example.dat' u COL:xticlabels(1) title columnheader(COL)
现在,我希望在直方图中的条形上方添加y值(数字),但添加
w标签会出现“此样式的列不够”错误

plot for [COL=2:10] 'example.dat' u COL:xticlabels(1) title columnheader(COL), \
    for [COL=2:10] 'example.dat' u COL title '' w labels
是否可以使用直方图样式添加y标签


注意:我知道有一些使用方框绘制
的示例。如果可能的话,我希望使用直方图样式来实现这一点。

这里是我提出的一个测试数据文件:

示例.dat

 hi world foo bar baz qux
 1   2     3   4   5   6    
 4   5     7   3   6   5    
下面是我用来绘制它的脚本:

set yrange [0:*]
GAPSIZE=4
set style histogram cluster gap 4
STARTCOL=2                 #Start plotting data in this column (2 for your example)
ENDCOL=6                   #Last column of data to plot (10 for your example)
NCOL=ENDCOL-STARTCOL+1     #Number of columns we're plotting 
BOXWIDTH=1./(GAPSIZE+NCOL) #Width of each box.
plot for [COL=STARTCOL:ENDCOL] 'example.dat' u COL:xtic(1) w histogram title columnheader(COL), \
    for [COL=STARTCOL:ENDCOL] 'example.dat' u (column(0)-1+BOXWIDTH*(COL-STARTCOL+GAPSIZE/2+1)-0.5):COL:COL notitle w labels
每个直方图簇在x轴上的总宽度为1个单位。我们知道我们需要多少宽度(盒子的数量+4,因为这是虚张声势)。我们可以计算每个框的宽度(
1/(N+4)
)。然后我们将直方图绘制为正常值。(注意,我在plot命令中添加了带有直方图的

根据内置帮助,标签需要3列数据(
xy标签
)。在这种情况下,y位置和标签相同,可以直接从列
COL
读取。第一个块的x位置以0为中心(总宽度为1)。因此,第一个块将位于
x=-0.5+2*BOXWIDTH
。这里的2是因为间隙是4个箱宽——两个在左边,两个在右边。下一个块将位于
-0.5+3*BOXWIDTH
等处。通常,(作为
列的函数)我们可以这样写

-0.5+BOXSIZE*(COL-STARTCOL+1+GAPSIZE/2)
我们需要将它向右移动1个单位,以便每读取一个额外的块。由于每个块对应于数据文件中的一行,我们可以使用伪列
0
(即
column(0)
$0
),因为它对于每个“记录/行”gnuplot读取都会递增。第0条记录保存标题,第一条记录保存第一个块。由于我们需要一个为第一条记录返回0的函数,因此我们使用
列(0)-1
。综上所述,我们发现x位置是:

(column(0)-1-0.5+BOXSIZE*(COL-STARTCOL+1+GAPSIZE/2))

这相当于我上面所说的。

哇,这么多的努力,OP没有反馈。不管怎样,你尝试过这个解决方案吗?“它有用吗?”爱德华多贝泽拉——我确实试过(而且也很自豪),它确实有用。为什么,你有问题吗?恰恰相反,现在我试过了,效果很好!在解决方案中命名变量有助于理解技巧。太糟糕了,这不像在曲线上放置标签那么容易。现在,我只运行一个脚本来创建数据表并绘制聚集的直方图,每个标签都正好位于每个条的顶部,完全对齐。@EduardoBezerra--太好了。你昨天问我时,我担心我发布了一个垃圾解决方案。@mgilson,很抱歉我的硬盘崩溃了,一旦我尝试了,我一定会选择你的答案。谢谢你这么详细。