Ответ 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
должен использовать переменную gnuplotmonitorSize
следующим образом: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
.
Обратите внимание, что команда оболочки как всегда извлекает информацию только о первом мониторе.