我正在使用GNUplot来绘制数据文件的轨道。我想使用autoscale xy
,以便根据数据不需要编辑GNUplot脚本。但是,在我绘图时,autoscale
未将xrange
设置为与yrange
相同。这使得轨道看起来“被压扁”。
我尝试过使用set size square
和set size ratio -1
How to set equal scale's length in gnuplot。
但是这没用。
无论如何强迫autoscale
使x和y范围相等?
谢谢!
答案 0 :(得分:5)
不,没有选项可以将x和y范围自动调整为相同的值。这是一个解决方案,你可以用一些技巧来做到这一点。
如果你想让gnuplot将范围扩展到下一个抽搐,你可以按照以下步骤进行:
您必须先使用unknown
终端进行一次绘图。这样可以保存gnuplot变量GPVAL_X_MIN
,GPVAL_X_MAX
,GPVAL_Y_MIN
和GPVAL_Y_MAX
中的x和y范围。然后设置范围和重新绘制:
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
只有在您想保留初始终端设置时才需要推/弹功能。
要使其可重复使用,例如与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
}
另一种选择是使用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'