Gnuplot
使用 x 範圍內具有相同值的文件的統計資訊進行繪圖
我想用 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
它有十個樣本,第 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
,例如的結果lbt01_mean
無法使用system
.此外,由於數據文件以 0.1 為步長(第 9 列)包含 0.1 到 1.7 的樣本,我想問是否有辦法縮短 Gnuplot 腳本。
問候
從 gnuplot 列印到文件的一種簡單方法是使用
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 的所有值,您可以使用從 1 到 17 的 for 循環,然後除以 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)) }