Как открыть gnuplots в полноэкранном режиме и конкретном размере?

Я рисую графики в gnuplot и хотел бы открыть их в полноэкранном режиме и в определенном размере.

Раньше я выводил графики в режиме мультимножества и обновлял их с помощью перечитывания; поэтому, когда я максимизирую его вручную, графики заполняют экран после нескольких итераций. Теперь я также хочу сохранить вывод в виде файла. Когда я открываю этот файл, он находится в том же небольшом размере, что и исходный вывод мультимножества. Однако, когда я его максимизирую, графики не увеличиваются, чтобы заполнить экран. У меня есть 2 вопроса:

  • Как открыть файл мультимножества в полноэкранном режиме?
  • Как я могу сделать выходной файл определенного размера?

Вот мой текущий код gnuplot (в файле gnuplotCode):

set terminal pngcairo dashed enhanced
set output 'foo.png'
set multiplot layout 3, 3
plot for [iter=1:9] path/to/file using 1:(column(iter)) notitle
unset multiplot
unset output
pause 10
reread

Я попытался ввести следующее:

gnuplot -geometry -3360-1050 gnuplotCode    # where my screen size is 3360x1050

и

resolution=$(xrandr | grep '*') && resolution=${resolution%  *}
gnuplot -geometry $resolution gnuplotCode

но ни один подход не работает. Пожалуйста, скажите мне, как открыть gnuplots в полноэкранном режиме и конкретном размере? Спасибо.

Ответ 1

Вы должны различать терминалы на основе пикселей (pngcairo, png, canvas (...) и все интерактивные терминалы wxt, x11, qt, windows, aqua, где размер задан в пикселе. Для терминалов на основе вектора (postscript, svg, postscript и т.д.) размер задается в дюймах или сантиметрах.

Использование флага -geometry работает только для терминала x11:

gnuplot -geometry 800x800 -persist -e 'set terminal x11; plot x'

Для всех других терминалов на основе пикселей вы можете использовать параметр size, чтобы установить размер холста в пикселе:

set terminal pngcairo size 800,800

Конечно, вы также можете извлечь разрешение монитора и использовать его как размер. Здесь у вас есть два варианта:

  • Извлеките размер монитора в оболочке:

    monitorSize=$(xrandr | awk '/\*/{sub(/x/,",");print $1; exit}')
    gnuplot -e "monitorSize='$monitorSize'; load 'gnuplotCode'"
    

    Затем файл gnuplotCode должен использовать переменную gnuplot monitorSize следующим образом:

    set macros
    set terminal pngcairo size @monitorSize
    set output 'foo.png'
    plot x
    

    Обратите внимание, что содержимое строковой переменной monitorSize должно использоваться как макрос, то есть значение вставляется перед оценкой всей строки.

  • Если вы не хотите иметь эту дополнительную строку в оболочке, вы также можете вызвать материал xrand из gnuplot script с помощью функции system. В этом случае файл gnuplotCode будет выглядеть следующим образом:

    monitorSize=system("xrandr | awk '/\*/{sub(/x/,\",\");print $1; exit}'")
    set macros
    set terminal pngcairo size @monitorSize
    set output 'foobar.png'
    plot x**2
    

    который вы должны вызывать только с помощью gnuplot gnuplotCode.

Обратите внимание, что команда оболочки как всегда извлекает информацию только о первом мониторе.