2017-12-11 36 views
0

gnuplot에 문제가 있습니다. 나는 51 개의 컬럼을 가진 두개의 데이터 파일 (file1과 file 2)에 적합 할 필요가있다. 이런 루프로 해주세요gnuplot 루프 안에 플롯을 맞추고 다시 쓰십시오.

do for [j=2:51] { 
       fxj(x) = Dxj*x+ qxj 
       fit [xmin:xmax] fxj(x) '< paste file1 file2' u 1:(((column(j))+(column(j+51)))/2) via Dxj, qxj 
       print j, ' ', Dxj/2 
       } 

모든 것이 훌륭합니다. 지금 내가 필요로하는 것은 원시 데이터와 피팅이 겹쳐 지도록 데이터 위로 루프에 정의 된 모든 fxj을 플로팅하는 것입니다. 나는이

do for [j=2:51] { 
       fxj(x) = Dxj*x+ qxj 
       fit [xmin:xmax] fxj(x) '< paste file1 file2' u 1:(((column(j))+(column(j+51)))/2) via Dxj, qxj 
       print j, ' ', Dxj/2 
       plot '< paste file1 file2' u 1:(((column(j))+(column(j+51)))/2) t'', fxj(x) t'' 
       } 

처럼 시도했지만 작동하지 않습니다. 작동하도록 제안 하시겠습니까?

+0

에 오신 것을 환영합니다 SO에 있습니다. 질문에 코드가 올바르게 작동하지 않는 것을 추가 할 수 있습니까? 이렇게하면 질문을 찾고 대답하는 것이 훨씬 쉬워집니다. – m00am

+0

https://stackoverflow.com/a/46959036/2604213 – Christoph

답변

1

하나의 접근법은 아래의 단순화 된 예와 같이 multiplot으로 표시 될 수 있습니다. 아이디어는 플롯 마진을 수정하여 멀티 플롯 환경 내의 각 연속 플롯이 동일한 "영역"에 표시되도록하는 것입니다. 또한, 루프 내에서, 스크립트는이 생산 것

set multiplot 

set lmargin at screen 0.1 
set rmargin at screen 0.9 
set bmargin at screen 0.1 
set tmargin at screen 0.9 

set xr [-2:2] 
set yr [-4:4] 

do for [j=1:3]{ 

    if(j>1){ 
     unset xtics; 
     unset ytics; 
     unset border; 
     unset xlabel; 
     unset ylabel; 
    } 

    set key at screen 0.3,0.9 - j*0.05 reverse 
    plot j*x w l t sprintf('plot %d', j); 
} 

... 그들은 여러 번 그려지지 않도록 모든 플롯하지만 첫 번째 것은 등 틱 설정을 해제 있는지 확인합니다 : enter image description here

또는 먼저 한 번에 모든 플롯 그런 다음, do 루프를 실행 배열 내부의 계수를 조립하고 수 :

set xr [-2:2] 
set yr [-4:4] 

array coeffs_a[3] 
array coeffs_b[3] 

do for [j=1:3]{ 

    #save the fitted coefficients 
    coeffs_a[j] = j 
    coeffs_b[j] = j 

} 

plot for [j=1:3] coeffs_a[j]*x + coeffs_b[j] w l t sprintf('plot %d', j) 
+0

내 즐겨 찾기 : 동일한 3 개의 보라색 줄 범례. – mikuszefski

+0

@mikuszefski 아, 참으로 부끄러운 줄 아나! :) 글쎄, 나는 단지 중첩 플롯 시나리오에서 범례를 배치하는 방법을 보여주고 싶었다. – ewcz