2013-09-03 1 views
18

이 질문은 질문 "Loop structure inside gnuplot?"과 관련이 있으며 DarioP (https://stackoverflow.com/users/2140449/dariop)의 대답과 관련이 있습니다.gnuplot의 루프 오버

gnuplot 4.6에는 do 명령이 도입되었습니다. 예를 들어 파일과 색상의 배열을 반복 할 때이 방법을 사용하려면 어떻게해야합니까? 올바른 구문은 무엇입니까? 당신은 하나의 플롯에있는 모든 파일을 원한다면

colors = "red green #0000FF" 
files = "file1 file2 file3" 

do for [i=1:3] { 
plot files(i).".dat" lc colors(i) 
} 

답변

32

, 당신은 (버전 4.4부터 지원) plot for[...를 사용해야합니다. (버전 4.6 이후에만 지원)을 사용하는 여러 plot 명령에 대한 루핑은 multiplot 모드에서만 작동합니다.

다음 두 가지 해결책은 모두 하나의 그래프에 모든 데이터를 표시하지만 반복에서 조금 다릅니다.

첫 번째 해결 방법은 word을 사용하여 플로팅 할 때 문자열에서 직접 단어를 추출합니다.

colors = "red green #0000FF" 
files = "file1 file2 file3" 
plot for [i=1:words(files)] word(files, i).'.dat' lc rgb word(colors, i) 

제 2 용액은 직접 단어리스트를 대신 인덱스를 사용 linetype 다음 반복을 변경한다.

colors = "red green #0000FF" 
files = "file1 file2 file3" 
set for [i=1:words(colors)] linetype i lc rgb word(colors, i) 
plot for [file in files] file.'.dat' 
+0

지금 막 테스트 해 보았습니다. 멀티 플롯 모드를 필요로하지 않는 두 번째 솔루션을 선호합니다. 그것은 작동합니다. 아름다운 솔루션. gnuplot을 10 년 넘게 사용 했음에도 불구하고 "단어"와 "단어"에 대해 알지 못했습니다. 고맙습니다. –

+0

@ tommy.carstensen'do for .. plot'을 사용하는 접근 방식은'multiplot' 모드에서만 작동합니다. 두 솔루션 모두'plot for [...]을 사용하고 단일 플롯을 제공합니다. 나는 이것을 명확히하기 위해 내 단검을 refrased. – Christoph

+2

설명해 주셔서 감사합니다. 또한 "단어"와 "단어"는 문자열 변수 데모에서 자세히 배우려는 사람들을위한 것임을 알게되었습니다 : http://gnuplot.sourceforge.net/demo/stringvar.html –