#for-loop #png #gnuplot
#цикл for #png #gnuplot
Вопрос:
У меня возникла проблема с созданием мультиплокатора размером 1×2 для нескольких текстовых файлов в цикле for. С помощью приведенного ниже скрипта я смог генерировать и выводить разные изображения при загрузке разных текстовых файлов. Однако, когда я пытаюсь использовать мультиплот внутри цикла, чтобы объединить оба графика в один график для каждого загруженного файла, gnuplot выдает следующее сообщение: вы не можете изменить вывод в режиме мультиплот
#=======================================
# Loading Data
#=======================================
set term pngcairo size 1200 ,800 enhanced font "Times-New-Roman, 12"
directory = "../Data/"
filelist = system("cd ../Data/ ; ls *.txt")
files = words(Exp_filelist)
filename(i) = word(filelist,i)
do for [i=1:files] {
set output sprintf("picture(x=-%d).png",i)
#set multiplot layout 1,2
#=======================================
# First plot
#=======================================
plot filename(i) using 4:3 with lines notitle
#=======================================
# Second plot
#=======================================
set output sprintf("Picture(x=%d).png",i)
plot filename(i) using 6:3 with lines notitle
}
unset multiplot
reset
Интересно, что я делал не так. Как заставить set multiplot генерировать 1×2 внутри цикла for для каждого загруженного текстового файла?
Комментарии:
1. Пожалуйста, объясните, что должен содержать ваш конечный график и где вы ожидаете его найти. Вообще нет смысла изменять выходной файл в середине мультиплока, поэтому я предполагаю, что либо вам действительно не нужен мультиплот, либо вы неправильно понимаете, что делает «set out». Что это?
2. Вторая
plot
команда должна быть передset output
не так ли?3. Для чего предназначена функция ‘y (i)’?
Ответ №1:
Вы должны закрыть multiplot
сеанс, прежде чем задать следующий вывод. Просто перейдите unset multiplot
в цикл, прежде set output
чем. После этого вы можете «повторно открыть» сеанс мультиплотов с помощью set multiplot
.
set term png
do for [i=1:files] {
set output sprintf("picture(x=-%d).png",i)
set multiplot layout 1,2
plot filename(i) using 4:3 with lines notitle
plot filename(i) using 6:3 with lines notitle
unset multiplot
}
Комментарии:
1. Большое спасибо, Том. Это именно то, что мне нужно. Я устанавливал отключенный мультиплот вне цикла 🙂