Gnuplot-在一张图片中比较多个箱线图对

Gnuplot-在一张图片中比较多个箱线图对,gnuplot,boxplot,Gnuplot,Boxplot,(编辑:删除直方图,不相关且容易混淆。) 我想要一个可以可视化统计数据的箱线图。我为两种类型的数据制作了两个数据文件。在第一列中写入级别,即x值,在第二列中写入值。每个数据点一行,每个级别几个点。我希望将不同文件中的相同级别的相互比较。我想出了以下代码: Tournament5 = "#99ffff"; Sigmascaling = "#4671d5" set terminal pngcairo set output "generations_dev.png" set yrange [0:17.

(编辑:删除直方图,不相关且容易混淆。)

我想要一个可以可视化统计数据的箱线图。我为两种类型的数据制作了两个数据文件。在第一列中写入级别,即x值,在第二列中写入值。每个数据点一行,每个级别几个点。我希望将不同文件中的相同级别的相互比较。我想出了以下代码:

Tournament5 = "#99ffff"; Sigmascaling = "#4671d5"
set terminal pngcairo
set output "generations_dev.png"
set yrange [0:17.5]
set ylabel "Maximum Compactness of Best Solutions"
set xlabel "Number of Generations"

set autoscale fix

set style fill solid 0.25 border -1
set style boxplot nooutliers pointtype 7 separation 3
set style data boxplot
set boxwidth 1

plot "generation_tour.data" using (1.0):2:(0):1, "generation_sig.data" using (2.0):2:(0):1
这给了我以下的图片:

现在我的问题是:

  • 为什么x值没有向右拉伸,而只是向上拉伸 中间的当我添加第二个文件时会发生这种情况,其中只有一个文件使用图形的全宽
  • 我每双只需要一个x标签,但我得到了两次,我怎么能超过一个
谢谢你的帮助


好的,这似乎有点棘手

两件事:在绘图案例中,gnuplot似乎无法为x值生成正确的自动缩放。您需要设置一个明确的xrange,就像您已经为yrange设置的那样。第二:gnuplot似乎总是使用
levels
列中给出的值作为xticlabel,而不给您禁止它们的更改

在这里,我为您提供了一个可能的解决方案,该解决方案依赖于数据文件,使第一列中具有相等值的块保持在一起,并通过两条空行与具有不同值的其他块分开,以便您可以通过
索引
关键字访问每个块并对其进行迭代:

...
"0" 14.49786677484523
"0" 14.691225516174955


"20" 10.28997920528754
"20" 8.764312035687594
...
然后,可以使用以下脚本在所需位置绘制所有这些箱线图:

    Tournament5 = "#99ffff"; Sigmascaling = "#4671d5"
set terminal pngcairo
set output "generations_dev.png"
set yrange [0:17.5]
set ylabel "Maximum Compactness of Best Solutions"
set xlabel "Number of Generations"

set autoscale xfix

set style fill solid 0.25 border -1
set style boxplot nooutliers pointtype 7
set style data boxplot
set boxwidth 1

stats "generation_sig.data" using 2 nooutput

plot for [i=0:STATS_blocks-1] "generation_sig.data" using (3*i):2 index i lt 1 title (i==0 ? 'Sigmascaling' : ''),\
     for [i=0:STATS_blocks-1] "generation_tour.data" using (3*i+1):2 index i lt 2 title (i==0 ? 'Tournament 5' : ''),\
     for [i=0:STATS_blocks-1] "generation_sig.data" using (3*i+0.5):(-1):xticlabel(1) index i w l notitle
stats
调用用于计算数据文件中包含的块数。第三个
绘图
明确地放在定义的Y范围之外。它只在两个方框图中间产生XTEC。你也可以用

plot for [i=0:STATS_blocks-1] "generation_sig.data" using (3*i):2:(0):1 index i lt 1,\
     for [i=0:STATS_blocks-1] "generation_tour.data" using (3*i+1):2 index i lt 2
这将为您提供位于两个箱线图中第一个箱线图中心的XTIC

输出是

如果您不想更改数据文件,并且可以使用
awk
,那么还可以使用

cmd(file) = '< awk ''{if (NR != 1 && $1 != prev) print "\n"; prev=$1; print}'' '.file
plot for [i=0:STATS_blocks-1] cmd("generation_sig.data") using (3*i):2 index i lt 1 # ....
cmd(文件)='