如何获得自动生成的gnuplot抽搐之间的距离?

时间:2014-09-22 20:18:43

标签: gnuplot

我正在使用gnuplot进行大量绘图。由于数据范围(对于x和y轴)对于每个图都是可变的,我需要让gnuplot自动设置范围和抽搐。但是,我需要在绘图下放置一个定义的网格,水平线每个1/8单位,垂直线1/4单位。当我让gnuplot决定在哪里放置抽搐时,我不知道两个抽搐之间的距离(以单位为单位)因此,我不知道我应该在m {x | y} tics中进行的细分数量期望的输出。

例如:如果我每两个单位都有一个ytic,我需要“设置mytics 8”。如果我每个单位都有一个ytic,我需要“设置mytics 4”。

那么,有一些方法可以获得自动放置抽搐之间的距离吗?甚至是绘制抽搐的数量?

1 个答案:

答案 0 :(得分:6)

要获取自动放置抽搐之间的距离,请使用以下代码(另存为ticstep.gp):

xr = abs(max_value - min_value)
power = 10.0 ** floor(log10(xr))
xnorm = xr / power # approximate number of decades
posns = 20.0 / xnorm;

if (posns > 40) {
  tics = 0.05
} else {
  if (posns > 20) {
    tics = 0.1
  } else {
    if (posns > 10) {
      tics = 0.2
    } else {
      if (posns > 4) {
        tics = 0.5
      } else {
        if (posns > 2) {
          tics = 1
        } else {
          if (posns > 0.5) {
            tics = 2
          } else {
            tics = ceil(xnorm)
          }
        }
      }
    }
  }
}
ticstep = tics * power

这应该等同于内部gnuplot代码来确定ticstep(参见axis.c, line 677

要仅获取tics步,您可以使用stats获取相应的数据值:

stats 'file.txt' using 1 noutput
max_value = STATS_max
min_value = STATS_min
load 'ticstep.gp'
print ticstep

要获得绘制抽搐的数量,您需要自动扩展轴限制(除非您使用set autoscale fix)。为此,您可以使用unknown终端进行绘图,例如GPVAL_Y_MAXGPVAL_Y_MIN

set terminal push # save current terminal
set terminal unknown
plot 'file.txt' using 1
set terminal pop # restore terminal
max_value = GPVAL_Y_MAX
min_value = GPVAL_Y_MIN
load 'ticstep.gp'

print sprintf('ticstep = %f', ticstep)
numtics = int((xr / ticstep) + 1)
print sprintf('numtics = %d', numtics)