2013-09-03 71 views
18

Câu hỏi này có liên quan đến câu hỏi "Loop structure inside gnuplot?" và câu trả lời của DarioP (https://stackoverflow.com/users/2140449/dariop).lặp qua mảng trong gnuplot

gnuplot 4.6 giới thiệu lệnh do. Làm thế nào tôi có thể sử dụng điều này để lặp qua một mảng cho các tập tin ví dụ và màu sắc? Cú pháp chính xác là gì?

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

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

Trả lời

32

Nếu bạn muốn có tất cả các tệp trong một ô, bạn cần sử dụng plot for[... (được hỗ trợ từ phiên bản 4.4). Lặp lại một số lệnh plot với do for (chỉ được hỗ trợ kể từ phiên bản 4.6) chỉ hoạt động ở chế độ multiplot.

Hai giải pháp sau đây cả hai lô tất cả dữ liệu trong một biểu đồ, nhưng khác nhau một chút trong các lần lặp.

Giải pháp đầu tiên sử dụng word để trích xuất một từ từ một chuỗi trực tiếp khi vẽ đồ thị.

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

Giải pháp thứ hai thay đổi linetype và sau đó lặp trực tiếp trên danh sách từ thay vì sử dụng chỉ mục.

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

Tôi chỉ vừa mới kiểm tra nó ngay bây giờ. Tôi thích giải pháp thứ hai của bạn, không yêu cầu chế độ nhiều người. Nó hoạt động. Giải pháp đẹp. Tôi không biết về "từ" và "từ" mặc dù đã sử dụng gnuplot trong hơn một thập kỷ. Cảm ơn bạn. –

+0

@ tommy.carstensen Cách tiếp cận của bạn với 'do for .. plot' chỉ hoạt động ở chế độ' multiplot'. Cả hai giải pháp của tôi đều sử dụng 'cốt truyện cho [...' và đưa ra một âm mưu duy nhất. Tôi refrased anwer của tôi để làm rõ điều này. – Christoph

+2

Cảm ơn bạn đã làm rõ. Tôi cũng học được rằng "từ" và "từ" được đề cập trong bản demo biến chuỗi cho những người muốn nghiên cứu chi tiết hơn: http://gnuplot.sourceforge.net/demo/stringvar.html –