我问的是一个新问题,因为How to plot histograms from rows in data file gnuplot中的更新没有受到太多关注。 相关问题:gnuplot histogram: How to put values on top of bars和gnuplot 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的变量,但是现在它是通过手动拆分文件计算的。 这是所需的输出:
我该怎么做?
答案 0 :(得分:0)
您可以使用do for
对四个块进行迭代,使用您stats
命令中已有的using
和every
设置来调用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