如何在全屏和指定大小下打开gnuplot?

13

我正在使用gnuplot绘制图形,并希望以全屏和特定大小打开它们。

之前,我一直在多合一模式下输出图形,并使用reread更新它们; 因此,当我手动最大化时,经过几次迭代后,绘图填充了整个屏幕。现在,我还想将输出保存为文件。打开该文件时,它与原始的multiplot输出相同的小尺寸。然而,当我最大化它时,绘图不会增大以填满屏幕。 我有两个问题:

  1. 我如何在全屏中打开multiplot文件?
  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

但是这两种方法都不起作用。请问您如何以全屏和特定的大小打开gnuplot?谢谢。


@Christoph:如果我用1680,1050替换@monitorSize,它可以正常工作。问题可能与“设置宏”有关吗?谢谢。 - Shenan
你需要使用 set 宏,以便在命令被评估之前将 monitorSize 变量的内容插入其中。我的两个最小示例对你有用吗?我已经测试过它们可以在版本 4.4.4、4.6.5 和 5.0rc1 中工作。 - Christoph
@Christoph,它给了我:未定义的变量:monitorSize。 - Shenan
@Christoph,输出为--1680,1050<换行>1680,1050--,后跟第4行的先前错误(现在)。 - Shenan
http://superuser.com/questions/441035/how-to-make-gnuplots-fullscreen - Ciro Santilli OurBigBook.com
显示剩余9条评论
1个回答

11

你必须区分基于像素的终端(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

当然,您也可以提取显示器分辨率并将其用作大小。这里有两种变体:

  1. 在 shell 中提取显示器大小:

  2. 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的内容必须用作宏,即在整行求值之前插入该值。

  3. 如果您不想在Shell上有额外的行,请通过system函数从gnuplot脚本中调用xrand。 在这种情况下,文件gnuplotCode将如下所示:

  4. 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调用它。

    请注意,此Shell命令始终仅提取第一个监视器的信息。


+1 xrandr | awk '/\*/{sub(/x/,",");print $1}' 使用内置的awk功能来完成与您所拥有的相同的操作,但可以节省管道的使用 :) - Tom Fenech
1
@TomFenech 再次感谢您为 awk 做出的优秀改进! - Christoph
@Christoph,你的第二个答案在我的电脑上不再起作用了,尽管第一个答案仍然有效。我收到了错误信息: awk: line 1: regular expression compile failed (missing operand) * 你知道为什么吗? - Shenan
对我来说,第二种变量仍然有效,现在使用GNU awk 4.1.4进行了测试。 - Christoph
谢谢你,@Christoph。是你让我检查了我的awk版本,我使用的是mawk而不是gawk。安装了gawk现在可以工作了。 - Shenan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接