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