gnuplot rowstacked histogram:如何计算并将标准偏差置于条形图之上?

时间:2015-06-24 18:51:10

标签: gnuplot histogram standard-deviation

我问的是一个新问题,因为How to plot histograms from rows in data file gnuplot中的更新没有受到太多关注。 相关问题:gnuplot histogram: How to put values on top of barsgnuplot rowstacked histogram: how to put sum above bars

t.dat文件如下所示:

          260.37
          260.04
          261.53
          261.32
          260.19
          260.49
          260.43
          260.59
          260.26
          260.68
          260.28
          259.93
          260.82
          259.50
          260.29
          260.52
          260.30
          259.91
          262.24
          260.58
          260.74
          260.22
          261.66
          260.31
          260.99
          259.79
          260.90
          259.88
          260.19
          261.50
          259.32
          260.79
          259.94
          260.35
          260.03
          260.07
          261.86
          261.09
          260.60
          260.15
           75.17
           75.16
           75.33
           75.31
           75.34
           75.04
           75.49
           75.25
           75.27
           75.32
           75.10
           75.75
           75.58
           74.86
           75.19
           75.44
           75.29
           75.31
           75.55
           75.91
           75.39
           75.65
           75.85
           75.67
           75.62
           74.87
           75.64
           75.69
           75.13
           77.76
           75.31
           74.87
           75.75
           75.27
           75.61
           74.84
           75.72
           75.40
           74.96
           75.33
           67.20
           67.26
           68.15
           68.67
           68.88
           67.56
           67.71
           66.87
           68.74
           67.32
           66.92
           69.62
           67.29
           66.87
           68.33
           67.73
           68.66
           68.75
           67.00
           67.22
           66.93
           68.81
           67.29
           67.18
           67.33
           67.91
           70.34
           67.15
           68.37
           69.60
           69.74
           69.62
           67.33
           66.79
           67.90
           67.39
           69.88
           68.48
           68.96
           67.36
           47.82
           47.54
           47.74
           47.95
           47.65
           47.71
           47.64
           47.71
           47.47
           48.19
           47.82
           48.06
           47.88
           48.22
           48.31
           47.58
           47.41
           47.85
           47.71
           47.93
           48.34
           47.95
           48.70
           47.58
           47.86
           47.96
           47.80
           48.00
           47.51
           47.56
           47.50
           47.52
           47.47
           47.76
           47.53
           48.27
           47.26
           47.79
           47.67
           47.57

目标是计算文件t.dat中四组数字的标准偏差,并将它们显示为组成直方图的条形图上方的标签。第1组:第1-40行第2组:第41-80行第3组:第81-120行第4组:第121-160行

到目前为止,我只是设法手动执行此操作。我已将所需的行范围分成单个文件,i。即tempos1.dat,tempos4.dat,tempos9.dat和tempos16.dat,使用统计数据计算出标准差,并将其显示为标签。

以下是代码:

set term pngcairo
set out 'st-dev.png'
unset key
stats "tempos1.dat" using 1 name "A"
stats "tempos4.dat" using 1 name "B"
stats "tempos9.dat" using 1 name "C"
stats "tempos16.dat" using 1 name "D"
set label "0.6234" at 28,275
set label "0.4666" at 90,90
set label "0.9836" at 149,85
set label "0.2947" at 210,65
set boxwidth 0.9 relative
set style data histogram
set style histogram cluster gap 1
set style fill solid 1.0 border -1
set xrange [0:250]
set xtics ("1" 40, "4" 100, "8" 160, "16" 220)
plot for [i=1:4] 't.dat' using ($0+20+(i-1)*61):1 every ::((i-1)*40)::(i*40-1) with boxes lt i

我阅读了相关帖子,看来,要将std dev放在条形图上方我只需在 using 子句中添加一列,其中包含存储std_dev的变量,但是现在它是通过手动拆分文件计算的。 这是所需的输出: enter image description here

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用do for对四个块进行迭代,使用您stats命令中已有的usingevery设置来调用plot 。然后,在每次迭代中,使用stats给您的许多值设置适当的标签:

  • STATS_mean_x作为标签的x坐标
  • STATS_max_y作为y坐标(加上1个字符高度的偏移量,使用set label ... offset 0,1完成)
  • STATS_stddev_y作为计算的标准差本身:
set term pngcairo
set out 'st-dev.png'
unset key
set boxwidth 0.9 relative
set style fill solid 1.0 border -1
set xlabel "Número de processos"
set ylabel "Tempo de execução (s)"
set xrange [0:250]
set xtics ("1" 40, "4" 100, "8" 160, "16" 220)

do for [i=1:4] {
    stats 't.dat' using ($0+20+(i-1)*61):1 every ::((i-1)*40)::(i*40-1) nooutput
    set label i sprintf('%.4f', STATS_stddev_y) center at STATS_mean_x,STATS_max_y offset 0,1
}

plot for [i=1:4] 't.dat' using ($0+20+(i-1)*61):1 every ::((i-1)*40)::(i*40-1) with boxes lt i

enter image description here