30

This question is related to Loop structure inside gnuplot? and the answer there by DarioP.

gnuplot 4.6 introduced the do command. How can I use this to loop over an array of for example files and colors? What is the correct syntax?

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

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

1 Answer 1

48

If you want to have all files in a single plot, you need to use plot for[... (supported since version 4.4). Looping over several plot commands with do for (supported only since version 4.6) works only in multiplot mode.

The following two solutions both plot all data in one graph, but differ a bit in the iterations.

The first solution uses word to extract a word from a string directly when plotting.

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

The second solution changes the linetype and then iterates directly over the word list instead of using an index.

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'
Sign up to request clarification or add additional context in comments.

3 Comments

I only just got around to test it now. I prefer your second solution, which does not require multiplot mode. It works. Beautiful solution. I did not know about "words" and "word" despite having used gnuplot for more than a decade. Thank you.
@tommy.carstensen Your approach with do for .. plot works only in multiplot mode. Both my solutions use plot for [... and give a single plot. I refrased my anwer to clarify this.
Thanks for clarifying. I also learned that "word" and "words" are covered in the string variables demo for those that want to study that in greater detail: gnuplot.sourceforge.net/demo/stringvar.html

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.