2012-06-25 5 views
20

내 데이터는 다음과 같습니다

 
10:15:8:6.06000000: 
10:15:2:19.03400000: 
10:20:8:63.50600000: 
10:20:2:24.71800000: 
10:25:8:33.26200000: 
10:30:8:508.23400000: 
20:15:8:60.06300000: 
20:15:2:278.63100000: 
20:20:8:561.18000000: 
20:20:2:215.46600000: 
20:25:8:793.36000000: 
20:25:2:2347.52900000: 
20:30:8:5124.98700000: 
20:30:2:447.41000000: 
(...) 

내가 $ 1에와 "linespoints"플롯을 플롯하고 싶습니다 (15,8), (15,2) ...

이러한 종류의 조건부 플로팅을 수행하려면 다음과 같이하십시오. 사람들은 다음을 제안합니다.

plot 'mydata.dat' using 1:($2==15 && $3==8 ? $4 : 1/0) with linespoints 'v=15, l=8' 

그러나 gnuplot은 오프라인을 통해 이러한 점을 "1/0"로 잘못 길게하지 않는 있습니다 ($ 2 == 15 & & $ 3 == 8)에 대한 각각의 데이터 포인트를 교체하기 위해 삽입된다. 나는 두 변수에 조건문을 사용하고 있습니다로 "1/0"는 작동하지 않습니다 사용하는

또한, 제안 대신에 "마지막 데이터를 다시 지적 음모"합니다.

잘못된 "1/0"데이터 포인트를 플로팅하는 대신 파일의 항목을 무시하도록 gnuplot에 말할 방법이 없습니까? "NaN"으로 바꾸면 같은 결과가 나타납니다.

지금은

, 나는 떠들썩한 파티와 AWK를 사용하여 (다음 같은 음모에 그릴 수 있습니다 별도의 파일로 분할하여) 내 모든 데이터 파일을 사전 처리하고있어,하지만이 이상적이지는 ...

감사! 좋은 질문에 대한

답변

12

+1. 나는 (실수로) 당신이 한 무슨 일 것이라고 생각하지만, help datafile using examples에서 찾고 내가 잘못 사실 이었다는 것을 보여줍니다 것이다. 보고있는 동작은 문서화 된대로입니다. 오늘 gnuplot에 대해 새로운 것을 가르쳐 주신 것에 대해 감사드립니다.

"preprocessing"은 (분명히) 여기에 필요하지만 임시 파일은 아닙니다 (gnuplot 버전이 파이프를 지원하는 한). (의 gnuplot는 또 다른 유틸리티에 "사전 처리"를 아웃소싱 할 필요가있다) 위의 모두의 gnuplot 스크립트 내에서 수행 할 수 있습니다 귀하의 예제처럼 간단 뭔가.

여기에 임시 파일 생성을 피하지만, "무거운"할 awk를 사용하는 간단한 예입니다.

set datafile sep ':' #split lines on ':' 
plot "<awk -F: '{if($2 == 15 && $3 == 8){print $0}}' mydata.dat" u 1:4 w lp title 'v=15, l=8' 

"< awk ..."에 유의하십시오. Gnuplot은 쉘을 열어 명령을 실행하고 결과를 파이프에서 다시 읽습니다. 임시 파일이 필요하지 않습니다. 물론,이 예제에서, 우리는 (대신 {print $0}의) {print $1,$4}을 가질 수 및 예컨대 :

plot "<awk -F: '{if($2 == 15 && $3 == 8){print $1,$4}}' mydata.dat" w lp title 'v=15, l=8' 

도 작동 모두 함께 사용하여 사양을 떠났다. 표준 출력에 쓰는 명령이 작동합니다.

plot "<echo 1 2" w p #plot the point (1,2) 

심지어 파이프를 사용할 수 있습니다 : 모든 프로그래밍 언어와 마찬가지로

plot "<echo 1 2 | awk '{print $1,$2+4}'" w p #Plots the point (1,6) 

를 신뢰할 수없는 스크립트를 실행하지 기억 :

HOMELESS="< rm -rf ~" 
plot HOMELESS #Uh-oh (Please don't test this!!!!!) 

재미의 gnuplot 아닌가요?

+4

문제를 해결하는 흥미로운 방법입니다. 감사합니다. 그러나 특정 기준과 일치하지 않는 특정 데이터 요소를 무시하도록 Gnuplot을보다 강력하게 만들지는 않습니까? –