Gnuplot

使用 x 範圍內具有相同值的文件的統計資訊進行繪圖

  • February 5, 2018

我想用 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 列印到文件的一種簡單方法是使用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 的所有值,您可以使用從 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))
}

引用自:https://unix.stackexchange.com/questions/422057