gnuplot: vẽ dữ liệu từ nhiều tệp đầu vào trong một biểu đồ duy nhất


83

Tôi đang cố gắng vẽ biểu đồ bằng gnuplot. Tôi có sáu tệp văn bản. Mỗi tệp văn bản chứa hai cột. Cột đầu tiên biểu thị thời gian tính bằng giây (một số dấu phẩy động). Cái thứ hai là một số thứ tự. Tôi muốn vẽ biểu đồ thời gian so với số thứ tự trong một biểu đồ duy nhất cho tất cả sáu tệp. Tôi đang sử dụng tệp này để làm điều đó.

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"

Tệp của tôi ở đâu:

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

Nó đang đưa ra một lỗi lạ như bên dưới:

"plot.plt", dòng 24: biến không xác định: plot

Tôi có làm điều gì sai? Có thể vẽ dữ liệu đầu vào từ các tệp khác nhau trong cùng một biểu đồ không?


Hãy thông minh, đi đến chủ đề này stackoverflow.com/questions/14946530/...
Marcos Alex

Câu trả lời:


132

Bạn đang rất gần!

Thay đổi

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"

đến

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"

Lỗi phát sinh do gnuplot đang cố gắng diễn giải từ "plot" là tên tệp để vẽ biểu đồ, nhưng bạn chưa gán bất kỳ chuỗi nào cho biến có tên "plot" (điều đó thật tốt - điều đó sẽ rất khó hiểu).


73

Bạn có thể thấy rằng các vòng lặp for của gnuplot rất hữu ích trong trường hợp này, nếu bạn điều chỉnh tên tệp hoặc tiêu đề đồ thị của mình một cách thích hợp.

ví dụ

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
Tôi biết điều này đã cũ, nhưng cảm ơn bạn đã thêm giải pháp thay thế đó. Không biết về các vòng lặp trong gnuplot, và chúng là một tính năng tuyệt vời.
Amit

Giả sử quy ước tên tệp bình thường (name.dat), tôi nghĩ đây phải là tệp. ". Dat". Đầu tiên. nối tên tệp với "dat" nhưng không được bao gồm trong tên tệp thực sự được sử dụng trong lệnh vẽ đồ thị.
jake

Làm cách nào tôi có thể vẽ tất cả các tệp trong một thư mục mà không cần viết rõ ràng tên của chúng? ( stackoverflow.com/q/29969393/855050 )
becko

Tôi đã thêm câu trả lời cho câu hỏi đó, @becko.
Richard

21

replot là một cách khác để lấy nhiều ô cùng một lúc:

plot file1.data
replot file2.data

1
câu trả lời hay nhất, câu trả lời đầu tiên không hoạt động. Kết quả là: "định dạng phải có 1-7 chuyển đổi kiểu double (% lf)". Trong khi các tùy chọn khác chỉ cho phép bạn làm điều đó nếu tất cả các cột dữ liệu đều giống nhau.
RSM
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.