我想用 Gnuplot 绘制均值和置信区间。我的数据有多个具有相同 x 值的样本
21 27 4 12 20 100 50000 false 0.1 "DFSA" 2 205068 31.986
24 27 4 12 20 100 50000 false 0.1 "DFSA" 2 207798 32.49448
22 27 4 12 20 100 50000 false 0.1 "DFSA" 2 207499 32.60746
23 27 4 12 20 100 50000 false 0.1 "DFSA" 2 214065 33.17844
25 27 4 12 20 100 50000 false 0.1 "DFSA" 2 198386 31.4488
26 27 4 12 20 100 50000 false 0.1 "DFSA" 2 208307 32.77412
28 27 4 12 20 100 50000 false 0.1 "DFSA" 2 208669 32.77474
27 27 4 12 20 100 50000 false 0.1 "DFSA" 2 214324 33.16506
30 27 4 12 20 100 50000 false 0.1 "DFSA" 2 209924 32.77186
29 27 4 12 20 100 50000 false 0.1 "DFSA" 2 212959 33.3218
32 27 4 12 20 100 50000 false 0.2 "DFSA" 2 486241 64.3479
31 27 4 12 20 100 50000 false 0.2 "DFSA" 2 487487 64.65076
33 27 4 12 20 100 50000 false 0.2 "DFSA" 2 494703 65.06718
34 27 4 12 20 100 50000 false 0.2 "DFSA" 2 488164 64.77828
36 27 4 12 20 100 50000 false 0.2 "DFSA" 2 476513 63.3158
35 27 4 12 20 100 50000 false 0.2 "DFSA" 2 491005 65.02426
38 27 4 12 20 100 50000 false 0.2 "DFSA" 2 487454 64.44962
37 27 4 12 20 100 50000 false 0.2 "DFSA" 2 490494 65.06572
39 27 4 12 20 100 50000 false 0.2 "DFSA" 2 472081 63.31234
40 27 4 12 20 100 50000 false 0.2 "DFSA" 2 498294 65.02114
它有 10 个样本,第 9 列 = 0.1,相同,值为 0.2。我想用置信区间绘制第 13 列(最后一列)的平均值,并使用 Gnuplot yerrorlines
,它需要四列数据x
mean
min
max
。最小值和最大值的公式使用第 13 列的 STATS_mean、STATS_ssd 和 STATS_records,并在第 9 列中使用相等的值。
我尝试x
mean
min
max
用这个将值写入文件中
system("touch lbt.dat")
stats "data.txt" u ($9==0.1?$13:1/0) name "lbt01"
system("(0.1 lbt01_mean (lbt01_mean - 2.262*lbt01_ssd/sqrt(lbt_records)) (lbt01_mean + 2.262*lbt01_ssd/sqrt(lbt_records))) >> lbt.dat")
system
但在将值保存在 lbt.dat 文件中的最后一个命令中出现错误。我也尝试过
system("printf '%f\t\%f\t\%f\t\%f' 0.1 lbt01_mean (lbt01_mean - 2.262*lbt01_ssd/sqrt(lbt_records)) (lbt01_mean + 2.262*lbt01_ssd/sqrt(lbt_records))) >> lbt.dat ")
(2.262 是 95% 置信区间和 9 个自由度的 t-student pdf 值)。
看起来stasts
,eg的结果lbt01_mean
无法使用 写入文件中system
。
另外,由于数据文件中有0.1到1.7的样本,步长为0.1(第9列),我想问是否有办法缩短Gnuplot脚本。
问候
答案1
从 gnuplot 打印到文件的一种简单方法是在print
使用set print
.尝试
set print "lbt.dat"
print 0.1, lbt01_mean, \
(lbt01_mean - 2.262*lbt01_ssd/sqrt(lbt01_records)),\
(lbt01_mean + 2.262*lbt01_ssd/sqrt(lbt01_records))
为了循环遍历 0.1 到 1.7 之间的所有值,您可以使用 for 循环从 1 到 17,然后除以 10。
set print "lbt.dat"
do for [i=1:17] {
v = i/10.
stats "data.txt" u ($9==v?$13:1/0) name "A" nooutput
print v, A_mean, (A_mean - 2.262*A_ssd/sqrt(A_records)),\
(A_mean + 2.262*A_ssd/sqrt(A_records))
}