GNUplot Autoscale将xrange设置为等于yrange

Roh*_*han 5 plot gnuplot

我正在使用GNUplot来绘制数据文件的轨道.我想使用,autoscale xy以便GNUplot脚本不需要根据数据进行编辑.但是,当我绘图时,autoscale没有设置xrange为相同yrange.这使得轨道看起来"被压扁".

我尝试过使用set size squareset size ratio -1 如何在gnuplot中设置相等比例的长度.

但这没效果.

无论如何强制autoscale使x和y范围相等?

谢谢!

Chr*_*oph 5

不,没有选项可以将x和y范围自动缩放到相同的值.这是一个解决方案,你可以用一些技巧来做到这一点.

如果你想让gnuplot将范围扩展到下一个抽搐,你可以按如下方式进行:

您必须先使用unknown终端进行一次绘图.这节省了gnuplot的变量x和y的范围GPVAL_X_MIN,GPVAL_X_MAX,GPVAL_Y_MINGPVAL_Y_MAX.然后设置范围和重新绘制:

set terminal push # save current terminal
set terminal unknown
plot 'datafile'
set terminal pop # restore previous terminal

min = (GPVAL_Y_MIN < GPVAL_X_MIN ? GPVAL_Y_MIN : GPVAL_X_MIN)
max = (GPVAL_Y_MAX > GPVAL_X_MAX ? GPVAL_Y_MAX : GPVAL_X_MAX)

set xrange[min:max]
set yrange[min:max]
set size ratio -1

replot
Run Code Online (Sandbox Code Playgroud)

只有在您想要保留初始终端设置时才需要推送/弹出内容.

要使其可重用,例如与之一起使用multiplot,您可以将所有这些命令包装在字符串中并调用eval它:

autoscale_xy(datafile) = \
    "set terminal push; set terminal unknown; set autoscale;".\
    "plot '".datafile."'; set terminal pop;".\
    "min = (GPVAL_Y_MIN < GPVAL_X_MIN ? GPVAL_Y_MIN : GPVAL_X_MIN);".\
    "max = (GPVAL_Y_MAX > GPVAL_X_MAX ? GPVAL_Y_MAX : GPVAL_X_MAX);".\
    "set xrange[min:max]; set yrange[min:max];"
...

files = "first second third fourth"
do for [f in files] {
    eval(autoscale_xy(f))
    plot f
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用stats计算最大和最小x和y值并相应地设置范围:

stats 'datafile' using 1:2 nooutput
min = (STATS_min_y < STATS_min_x ? STATS_min_y : STATS_min_x)
min = (STATS_max_y > STATS_max_x ? STATS_max_y : STATS_max_x)

sc = 1.05
set xrange[sc*min:sc*max]
set yrange[sc*min:sc*max]
set size ratio -1

plot 'datafile'
Run Code Online (Sandbox Code Playgroud)