2012-05-22 5 views
2

두 파일 A와 B가 있습니다. 두 파일 모두 x와 y 두 개의 열을 포함합니다.gnuplot plot 2 컬럼의 차이

이제 x vs (yA - yB)에 대한 그래프를 플롯하려고합니다. gnuplot이 동일한 명령을 제공합니까?

한 가지 더 말하면 xA와 xB는 같지 않습니다. x 축에 xA와 xB, y 축에 모두 포함 된 모든 요소가 포함 된 그래프를 어떻게 그려야합니까? 차이는 해당 y- 구성 요소입니까? 먼저

+0

은 토륨 아래로, 항상 * 정확히 * 일치하는 Xa 및 xB를 항목입니다 전자 문자? 또는 5.0000을 5.0001과 병합 할 수 있습니까? –

+0

정확히 일치합니다. 병합 열은 부호없는 정수입니다. –

+0

"두 요소 모두에있는 모든 요소"-이 (나에게) 모호합니다. 당신은 노동 조합이나 교차점을 원합니까? 당신이 교차로를 원했던 것처럼 들리지만, 당신이 노조를 원했을 경우를 대비해 나는 아래의 해결책을 제시했다. – mgilson

답변

5

는 bash는 join와 파일을 사전 처리 : 파일을 정렬

join <(sort -k1,1 file1) <(sort -k1,1 file2) > file3 

가 중요하다, 그렇지 않으면 join이 작동하지 않을 것입니다. join이 선이 서로 교차하게 숫자 정렬을 사용하기 때문에,

plot '< sort -n file3' using 1:($2-$3) with lines 

가 다시 숫자 정렬이 여기에 필요한 :

는 그런 다음 그래프를 그릴 결과를 사용할 수 있습니다.

+0

* 큰 데이터의 경우 *가 느린 경우 (3 종류), perl/Python 스크립트가 더 나은 방법 일 수 있습니다. 또한 처음 두 종류가 숫자가 될 수 없으므로 세 번째 정렬을 피할 수 있습니까? –

+0

@PhilH : 불행히도'join '은 이미 언급 한 바와 같이 영숫자 정렬이 필요합니다. 그것을보십시오. 어떤 합병증이 있다면, 나는 또한 고급 언어 (제 경우에는 Perl)에 도달 할 것입니다. – choroba

2

나는 이것이 paste에 좋은 직장이라고 생각합니다. 파일에 대한

plot "<paste A B" u 1:($2-$4) w points #whatever line style you want... 
        #xA #yA-yB 

XA를! =의 xB, 난 당신과 점의 세트를 플롯 할 두 (두 세트의 교차점)에 또는인지 일반인지 약간 불분명 해요 싶은 곳 모든 점 (세트의 조합)을 그립니다. 노조는 간단합니다 : 교차 열심히하지만 Python을 사용

(당신이 입력의 순서를 유지하려는 특히 경우)에만 유닉스 명령 행 도구를 사용

plot "<paste A B" u 1:($2-$4) w points ls 1,\ 
    "<paste A B" u 3:($2-$4) w points ls 1 

, 그것은 ...

너무 나쁘지 않아 의 gnuplot에서
#joinfiles.py 
import sys 
f1=sys.argv[1] 
f2=sys.argv[2] 
xA,yA=zip(*[map(float,line.split()) for line in f1.readlines()]) 
xB,yB=zip(*[map(float,line.split()) for line in f2.readlines()]) 
f1.close() 
f2.close() 
for i,x in enumerate(xA): 
    if(x in xB): 
     sys.stdout.write('%f %f %f\n'%(x,yA[i],yB[i])) 

다음 :

plot "<python joinfiles.py A B" u 1:($2-$3) #...