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개의 data 열이 필요한 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))
}

관련 정보