gpt4 book ai didi

plot - GNUplot Autoscale 设置 xrange 等于 yrange

转载 作者:行者123 更新时间:2023-12-04 19:05:09 24 4
gpt4 key购买 nike

我正在使用 GNUplot 从数据文件中绘制轨道。我想用autoscale xy这样 GNUplot 脚本就不需要根据数据进行编辑。但是,当我绘图时,autoscale不设置 xrangeyrange 相同.这使得轨道看起来“被压扁了”。

我试过使用 set size squareset size ratio -1 How to set equal scale's length in gnuplot .

但这没有用。

有什么好逼的autoscale使 x 和 y 范围相等?

谢谢!

最佳答案

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

如果您想将 gnuplot 的范围扩展到下一个 tic,您可以按如下方式进行:

您必须先使用 unknown 绘图一次终端。这会将 x 和 y 范围保存在 gnuplot 变量中 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

仅当您想保留初始终端设置时才需要推送/弹出内容。

为了使其可重用,例如用于 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'

关于plot - GNUplot Autoscale 设置 xrange 等于 yrange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26997939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com