x 範囲内で同じ値を持つファイルの統計を使用したプロット

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

これには、10個のサンプル、列9 = 0.1、0.2と同じ値があります。yerrorlines4つのデータ列を必要とするGnuplotを使用して、信頼区間を使用して列13(最後の列)の平均をプロットしたいと思います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スクリプトを短縮する方法があるかどうか見てみたいです。

挨拶

ベストアンサー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))
}

おすすめ記事