Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gnuplot:存储绘图区域尺寸以供以后使用_Gnuplot - Fatal编程技术网

Gnuplot:存储绘图区域尺寸以供以后使用

Gnuplot:存储绘图区域尺寸以供以后使用,gnuplot,Gnuplot,是否可以在gnuplot中存储绘图空间的尺寸?我不是指整个画布,而是指绘图框内的区域。在plot命令后,可以使用几个gnuplot定义的变量GPVAL*(键入show variables all)查看值。其中一些可用于获取上一个绘图的边距: plot sin(x) TSCALE = 1.0 LMARGIN = TSCALE*GPVAL_TERM_XMIN/(1.0*GPVAL_TERM_XSIZE) RMARGIN = TSCALE*GPVAL_TERM_XMAX/(1.0*GPVAL_TERM

是否可以在gnuplot中存储绘图空间的尺寸?我不是指整个画布,而是指绘图框内的区域。

plot
命令后,可以使用几个gnuplot定义的变量
GPVAL*
(键入
show variables all
)查看值。其中一些可用于获取上一个绘图的边距:

plot sin(x)
TSCALE = 1.0
LMARGIN = TSCALE*GPVAL_TERM_XMIN/(1.0*GPVAL_TERM_XSIZE)
RMARGIN = TSCALE*GPVAL_TERM_XMAX/(1.0*GPVAL_TERM_XSIZE)
TMARGIN = TSCALE*GPVAL_TERM_YMAX/(1.0*GPVAL_TERM_YSIZE)
BMARGIN = TSCALE*GPVAL_TERM_YMIN/(1.0*GPVAL_TERM_YSIZE)
要在以后恢复页边距,请使用

set lmargin at screen LMARGIN
set rmargin at screen RMARGIN
set tmargin at screen TMARGIN
set bmargin at screen BMARGIN
TSCALE
是一个取决于终端的因子,因为
GPVAL_TERM_*MIN
GPVAL_TERM_*MAX
是通过过采样因子在内部进行缩放的,但是
GPVAL_TERM_*SIZE
值不是(至少是4.6.0、4.6.3和4.7(2013-09-23))。对于
pdfcairo
而言,该值必须为
20
,而对于
wxt
而言,该值为
1
。对不同终端的一个比较完整的检查是:

if (GPVAL_TERM eq 'pdfcairo' || \
    GPVAL_TERM eq 'cairolatex' || \
    GPVAL_TERM eq 'pngcairo' || \
    (GPVAL_TERM eq 'postscript' && strstrt(GPVAL_TERMOPTIONS, 'eps ') == 1)) {
        TSCALE = 20.0
} else {
    if (GPVAL_TERM eq 'svg' || GPVAL_TERM eq 'postscript') {
        TSCALE = 10.0
    } else {    
        TSCALE = 1.0
    }   
}
由于gnuplot 5.0,一个单独的变量
GPVAL\u TERM\u SCALE
可用,该变量已包含所选终端的适当值,并使此复杂检查过时

自动化 有很多方法可以实现自动化。例如,您可以将这些定义写成字符串,并在需要时调用
eval

save_margins = 'TSCALE = 1.0;'\
               'LMARGIN = TSCALE*GPVAL_TERM_XMIN/(1.0*GPVAL_TERM_XSIZE);'.\
               'RMARGIN = TSCALE*GPVAL_TERM_XMAX/(1.0*GPVAL_TERM_XSIZE);'.\
               'TMARGIN = TSCALE*GPVAL_TERM_YMAX/(1.0*GPVAL_TERM_YSIZE);'.\
               'BMARGIN = TSCALE*GPVAL_TERM_YMIN/(1.0*GPVAL_TERM_YSIZE);'
plot sin(x)
eval(save_margins)
print LMARGIN
因此

restore_margins = 'set lmargin at screen LMARGIN;'.\
                  'set rmargin at screen RMARGIN;'.\
                  'set tmargin at screen TMARGIN;'.\
                  'set bmargin at screen BMARGIN'
eval(restore_margins)
普遍使用 要尽可能普遍地使用这些功能,只需在脚本中添加以下内容,例如
固定边距.gp

save_margins = 'LMARGIN = TSCALE*GPVAL_TERM_XMIN/(1.0*GPVAL_TERM_XSIZE);'.\
               'RMARGIN = TSCALE*GPVAL_TERM_XMAX/(1.0*GPVAL_TERM_XSIZE);'.\
               'TMARGIN = TSCALE*GPVAL_TERM_YMAX/(1.0*GPVAL_TERM_YSIZE);'.\
               'BMARGIN = TSCALE*GPVAL_TERM_YMIN/(1.0*GPVAL_TERM_YSIZE);'
restore_margins = 'set lmargin at screen LMARGIN;'.\
                  'set rmargin at screen RMARGIN;'.\
                  'set tmargin at screen TMARGIN;'.\
                  'set bmargin at screen BMARGIN;'
set_fixed_margins = save_margins . restore_margins

if (exists('GPVAL_TERM_SCALE')) {
    TSCALE = GPVAL_TERM_SCALE
} else {
    if (GPVAL_TERM eq 'pdfcairo' || \
        GPVAL_TERM eq 'cairolatex' || \
        GPVAL_TERM eq 'pngcairo' || \
        (GPVAL_TERM eq 'postscript' && strstrt(GPVAL_TERMOPTIONS, 'eps ') == 1)) {
            TSCALE = 20.0
    } else {
        if (GPVAL_TERM eq 'svg' || GPVAL_TERM eq 'postscript') {
            TSCALE = 10.0
        } else {    
            TSCALE = 1.0
        }   
    }
}
要使用此功能,只需在设置终端后加载脚本,然后在绘图中的适当位置加载边距字符串:

set terminal ...
load 'fixed-margins.gp'

set multiplot
plot sin(x)
eval(set_fixed_margins)
....

gnuplot4.4引入了
GPVAL\u TERM.*
变量。在gnuplot 5.0中还有
GPVAL\u TERM\u SCALE
。我可以确认pdfcairo
GPVAL\u TERM\u SCALE=20
和postscript
GPVAL\u TERM\u SCALE=10
@Hotschke是的,谢谢添加。我已经在中使用了此变量:)我更新了通用脚本以使用此变量(如果可用)。