Построение 1,2 мультиплокаторов в цикле for с помощью gnuplot

#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. Большое спасибо, Том. Это именно то, что мне нужно. Я устанавливал отключенный мультиплот вне цикла 🙂