Подтвердить что ты не робот

Loop over array в gnuplot

Этот вопрос связан с вопросом "Структура цикла внутри gnuplot?" и ответ DarioP (https://stackoverflow.com/users/2140449/dariop).

gnuplot 4.6 представил команду do. Как я могу использовать это для цикла над массивом, например, файлов и цветов? Каков правильный синтаксис?

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

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

Ответ 1

Если вы хотите иметь все файлы в одном графике, вам нужно использовать plot for[... (поддерживается со версии 4.4). Зацикливание нескольких команд plot с помощью do for (поддерживается только с версии 4.6) работает только в режиме 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)

Второе решение изменяет 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'