gnuplot : 단일 그래프에 여러 입력 파일의 데이터 플로팅


84

gnuplot을 사용하여 그래프를 그리려고합니다. 6 개의 텍스트 파일이 있습니다. 각 텍스트 파일에는 두 개의 열이 있습니다. 첫 번째 열은 시간을 초 단위로 나타냅니다 (부동 소수점 숫자). 두 번째는 시퀀스 번호입니다. 6 개 파일 모두에 대해 단일 그래프에 시간 대 시퀀스 번호의 그래프를 플로팅하고 싶습니다. 이 파일을 사용하고 있습니다.

set terminal png
set output 'akamai.png'

set xdata time
set timefmt "%S"
set xlabel "time"

set autoscale

set ylabel "highest seq number"
set format y "%s"

set title "seq number over time"
set key reverse Left outside
set grid

set style data linespoints

plot "print_1012720" using 1:2 title "Flow 1", \
plot "print_1058167" using 1:2 title "Flow 2", \
plot "print_193548"  using 1:2 title "Flow 3", \ 
plot "print_401125"  using 1:2 title "Flow 4", \
plot "print_401275"  using 1:2 title "Flow 5", \
plot "print_401276"  using 1:2 title "Flow 6"

내 파일 위치 :

  • print_1012720
  • print_1058167
  • print_193548
  • print_401125
  • print_401275
  • print_401276

아래와 같이 이상한 오류가 발생합니다.

"plot.plt", 24 행 : 정의되지 않은 변수 : 플롯

내가 뭘 잘못하고 있니? 동일한 그래프에서 다른 파일의 입력 데이터를 플로팅 할 수 있습니까?


답변:


133

너무 가까워요!

변화

plot "print_1012720" using 1:2 title "Flow 1", \
plot "print_1058167" using 1:2 title "Flow 2", \
plot "print_193548"  using 1:2 title "Flow 3", \ 
plot "print_401125"  using 1:2 title "Flow 4", \
plot "print_401275"  using 1:2 title "Flow 5", \
plot "print_401276"  using 1:2 title "Flow 6"

...에

plot "print_1012720" using 1:2 title "Flow 1", \
     "print_1058167" using 1:2 title "Flow 2", \
     "print_193548"  using 1:2 title "Flow 3", \ 
     "print_401125"  using 1:2 title "Flow 4", \
     "print_401275"  using 1:2 title "Flow 5", \
     "print_401276"  using 1:2 title "Flow 6"

gnuplot이 "plot"이라는 단어를 플롯 할 파일 이름으로 해석하려고하지만 "plot"이라는 이름의 변수에 문자열을 할당하지 않았기 때문에 오류가 발생합니다.


74

이 경우 파일 이름이나 그래프 제목을 적절하게 조정하면 gnuplot의 for 루프가 유용하다는 것을 알 수 있습니다.

예 :

filenames = "first second third fourth fifth"
plot for [file in filenames] file."dat" using 1:2 with lines

filename(n) = sprintf("file_%d", n)
plot for [i=1:10] filename(i) using 1:2 with lines

6
나는 이것이 오래되었다는 것을 알고 있지만 대체 솔루션을 추가해 주셔서 감사합니다. gnuplot의 루프를 인식하지 못했고 놀라운 기능입니다.
아밋

일반적인 파일 이름 규칙 (name.dat)을 가정하면 이것이 file. ". dat"이어야한다고 생각합니다. 첫번째 . 파일 이름을 "dat"에 연결하지만 플로팅 명령에서 실제로 사용되는 파일 이름에는 포함되지 않습니다.
제이크

이름을 명시 적으로 쓰지 않고 디렉토리의 모든 파일을 어떻게 플로팅 할 수 있습니까? ( stackoverflow.com/q/29969393/855050 )
becko 2015

이 질문에 대한 답을 @becko에 추가했습니다.
리처드

22

replot

이것은 한 번에 여러 플롯을 얻는 또 다른 방법입니다.

plot file1.data
replot file2.data

1
첫 번째 답변은 작동하지 않았습니다. 출력은 "형식은 double (% lf) 유형의 1-7 개의 변환이 있어야합니다."입니다. 다른 옵션은 모든 데이터 열이 동일한 경우에만 수행 할 수 있습니다.
RSM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.