在gnuplot中,仅在直方图中的几个条上插入标签

在gnuplot中,仅在直方图中的几个条上插入标签,gnuplot,histogram,labeling,Gnuplot,Histogram,Labeling,我正在用下面的代码绘制直方图 set style data histogram #clustered #set terminal wxt enhanced persist set term post eps enhanced "Times-Roman, 14" set output 'tostack.eps' #change here #set boxwidth 0.9 set grid set auto y #set auto x set auto y #set ylabel form

我正在用下面的代码绘制直方图

set style data histogram
#clustered
#set terminal wxt enhanced persist
set term post eps enhanced "Times-Roman, 14"
set output 'tostack.eps'    #change here
#set boxwidth 0.9 
set grid
set auto y
#set auto x
set auto y
#set ylabel format "{/:Bold}"
#set size 1.35,0.35
#set title ""
set style histogram clustered gap 1 title offset 1,0.25
set ylabel "\nXXX (in %)\n\n" font "Times-Roman ,25"     #change here
set xlabel "\nYYY \n" font "Times-Roman,25"                 #change here
#set style fill solid noborder
set style fill pattern  border -1
set key right
set key spacing 3 font "Times-Roman,20"
set xtics font ", 20"
set ytics font ", 20"

plot for [COL=2:5] 'tostack.dat' using COL:xticlabels(1) title columnheader fs pattern 2
我的数据文件是

AA  BB      CC      DD      EE
100 23.6491500555   6.9743235667    6.5497090218    6.9819639165
200 6.4522741669    14.0817294443   15.1392548608   4.4619875307
300 8.8030456951    8.1386311242    12.5224139497   6.7637627586
400 25.7698157655   7.6673254026    10.0040799765   11.7883595409
在生成的柱状图中,如何仅为每组中值较大的条插入标签


另外,请帮助我将这些标签加粗。

为了在每组中找到最大值,很可能需要使用外部处理工具。例如,可以使用如下所示的gawk。我们的想法是跳过标题(条件
NR>1
),在每一行中查找最大列数(假设您的数据文件有4个数据列,这个数字将是2、3、4或5)。现在,在柱状图中,各个框组连续以0、1、2等为中心。有4个数据列(并且
boxwidth
设置为1),每个框的宽度为0.2(每组两个中心之间有4个框+一个“空格”的空框)。为了找到放置标签的x坐标,因此有必要将数字
2,3,4,5
转换为
b-0.3、b-0.1、b+0.1、b+0.3
,其中b表示组的基于0的数字:

set terminal postscript eps enhanced "Times-Roman" 14
set output 'tostack.eps'

set grid

set boxwidth 1.0
set style data histogram
set style histogram clustered gap 1 title offset 1,0.25

set ylabel "XXX (in %)" font "Times-Roman, 25"
set xlabel "YYY" font "Times-Roman, 25"

set style fill pattern border -1
set key right
set key spacing 3 font "Times-Roman, 20"

set xtics font ",20"
set ytics font ",20"

plot \
    for [COL=2:5] 'tostack.dat' using COL:xticlabels(1) title columnheader fs pattern 2, \
    "<gawk 'NR>1{ \
        j=0; \
        for(i=2;i<=NF;i++){ \
            if(i == 2 || $i > m){ \
                m=$i;j=i; \
            } \
        } \
        print (NR-2)+(0.2*j-0.7), m; \
    }' tostack.dat" u 1:2:(sprintf("%.3f", column(2))) t "" w labels offset 0,char 1 font "Times-Bold, 16"
设置终端postscript eps增强版“Times Roman”14
设置输出“tostack.eps”
设置网格
将boxwidth设置为1.0
设置样式数据直方图
设置样式直方图聚集间距1标题偏移量1,0.25
设置字母“XXX(单位%)”字体“Times Roman,25”
设置xlabel“YYY”字体“Times Roman,25”
设置样式填充图案边框-1
设置正确的键
设置键间距3字体“Times Roman,20”
设置xtics字体“20”
设置ytics字体“20”
密谋\
对于[COL=2:5]“tostack.dat”,使用COL:xticlabels(1)标题列标题fs模式2\

“为了在每个组中找到最大值,很可能需要使用外部处理工具。例如,可以使用如下所示的gawk。方法是跳过标题(条件
NR>1
),并在每行中找到具有最大值的列号(假设您的数据文件有4个数据列,这个数字将是2、3、4或5)。现在,在直方图中,各个框组连续居中于0、1、2等。如果有4个数据列(并且
boxwidth
设置为1),每个框的宽度为0.2(每个组的两个中心之间有4个框+一个空框用于“空格”).为了找到放置标签的x坐标,因此有必要将数字
2,3,4,5
转换为
b-0.3,b-0.1,b+0.1,b+0.3
,其中b表示组的基于0的数字:

set terminal postscript eps enhanced "Times-Roman" 14
set output 'tostack.eps'

set grid

set boxwidth 1.0
set style data histogram
set style histogram clustered gap 1 title offset 1,0.25

set ylabel "XXX (in %)" font "Times-Roman, 25"
set xlabel "YYY" font "Times-Roman, 25"

set style fill pattern border -1
set key right
set key spacing 3 font "Times-Roman, 20"

set xtics font ",20"
set ytics font ",20"

plot \
    for [COL=2:5] 'tostack.dat' using COL:xticlabels(1) title columnheader fs pattern 2, \
    "<gawk 'NR>1{ \
        j=0; \
        for(i=2;i<=NF;i++){ \
            if(i == 2 || $i > m){ \
                m=$i;j=i; \
            } \
        } \
        print (NR-2)+(0.2*j-0.7), m; \
    }' tostack.dat" u 1:2:(sprintf("%.3f", column(2))) t "" w labels offset 0,char 1 font "Times-Bold, 16"
设置终端postscript eps增强版“Times Roman”14
设置输出“tostack.eps”
设置网格
将boxwidth设置为1.0
设置样式数据直方图
设置样式直方图聚集间距1标题偏移量1,0.25
设置字母“XXX(单位%)”字体“Times Roman,25”
设置xlabel“YYY”字体“Times Roman,25”
设置样式填充图案边框-1
设置正确的键
设置键间距3字体“Times Roman,20”
设置xtics字体“20”
设置ytics字体“20”
密谋\
对于[COL=2:5]“tostack.dat”,使用COL:xticlabels(1)标题列标题fs模式2\

“非常感谢,ewcz。在问题中,我在数据文件的每一列中提到了“每组”的意思。我计划绘制不同大小(100200,…)的不同方法BB、CC….的增加百分比图。因此,我想告诉看到图表的人,每个方法的最大增加百分比是多少。谢谢,但是代码显示了一条警告消息,并且没有打印标签。警告是“fromstack.plot”,第36行:警告:跳过没有有效点的数据文件`我在该目录中有有效的数据文件。猜不出哪里出了问题!有趣的是,您使用的是哪个Gnuplot版本/平台?数据文件格式与您问题中的格式相同?我使用的是版本-4.4.3,我使用的是Ubuntu 12.04。数据文件格式是s你能试着用
awk
替换
gawk
吗?我想默认情况下Ubuntu上没有安装
gawk
…非常感谢,ewcz。在问题中,我提到了“每个组”在数据文件的每列中表示。我计划绘制不同大小(100200,…)的不同方法BB、CC….的增加百分比。因此,我想告诉看到图表的人,每个方法的最大增加百分比是多少。谢谢,但是代码显示了一条警告消息,并且没有打印标签。警告是“fromstack.plot”,第36行:警告:跳过没有有效点的数据文件`我在该目录中有有效的数据文件。猜不出哪里出了问题!有趣的是,您使用的是哪个Gnuplot版本/平台?数据文件格式与您问题中的格式相同?我使用的是版本-4.4.3,我使用的是Ubuntu 12.04。数据文件格式是s你能试着用
awk
替换
gawk
吗?我想默认情况下Ubuntu上没有安装
gawk
。。。