【问题标题】:gnuplot rowstacked histogram: how to calculate and put standard deviations on top of bars?gnuplot rowstacked histogram:如何计算标准偏差并将其放在条形图上?
【发布时间】:2015-09-11 03:11:32
【问题描述】:

我提出一个新问题是因为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 行

到目前为止,我只能手动完成此操作。我已将所需的行范围拆分为单个文件,即。 e. 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 的变量,但现在它是通过手动拆分的文件计算的。 这是所需的输出:

我该怎么做?

【问题讨论】:

  • 你的更新没有受到太多关注,因为更新不是为了问一个基本的新问题;)

标签: gnuplot histogram standard-deviation


【解决方案1】:

您可以使用do for 遍历四个块,使用与plot 命令中相同的usingevery 设置调用stats。然后,在每次迭代中,使用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

【讨论】:

  • 我测试了您的代码,但收到“期望 [no] 输出或前缀”错误消息。 gnuplot 将错误指向脚本中单词“offset”的第二个“f”字母。
  • Ups,是的,代码格式被前面的列表搞砸了。我现在修好了。现在工作正常(用 4.6.0、4.6.6 和 5.0 测试)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
相关资源
最近更新 更多