在gnuplot中使用单独的y轴时,如何将零固定在同一位置?

时间:2013-04-13 01:01:49

标签: gnuplot

我有一个数据文件,第1列作为自变量,第2列和第3列作为因变量。我想用不同的y轴绘制变量2和3:

plot "file.out" u 1:2 axes x1y1, "file.out" u 1:3 axes x1y2

当我这样做时,两个轴的“0”彼此偏移。如何将一个y轴的零点固定到另一个y轴的零点,而没有明确地将yrange设置为两个量的对称?

3 个答案:

答案 0 :(得分:2)

版本5可能使用set link。但是,它不能自动拟合比率,因此您可以自己计算比率

stat "file.out" u 1:2
MAX1=abs(STATS_max_y)
MIN1=-abs(STATS_min_y)
stat "file.out" u 1:3
MAX2=abs(STATS_max_y)
MIN2=-abs(STATS_min_y)
min(a,b)=(a<b)?a:b
set link y2 via min(MAX1/MAX2,MIN1/MIN2)*y inverse y/min(MAX1/MAX2,MIN1/MIN2)
plot "file.out" u 1:2 axes x1y1, "file.out" u 1:3 axes x1y2

答案 1 :(得分:1)

不幸的是,你不能(至少不是一般)。如果yrange具有高于和低于0的相同百分比,它应该可以工作,例如:

set yrange [-5:10]
set y2range [-10:20]

但如果你不想这样做,那么我不知道有更好的解决方案......

答案 2 :(得分:1)

这是一个无需链接轴即可使用的解决方案,因此即使在gnuplot 4.4(2010年版本)中也可以使用。 虽然不需要stats,但缺点是需要重新绘制数据以获得y2轴的适当比例。

代码:

### aligning zero on y1- and y2-axes
reset

set ytics nomirror
set y2tics nomirror
set xzeroaxis
set key top left

plot \
    sin(x) axes x1y1 w l, \
    cos(x)-0.5 axes x1y2 w l

R0 = -GPVAL_Y_MIN/(GPVAL_Y_MAX-GPVAL_Y_MIN)
y2_min_new  = abs(GPVAL_Y2_MIN)>abs(GPVAL_Y2_MAX) ? GPVAL_Y2_MIN : R0*GPVAL_Y2_MAX/(R0-1)
y2_max_new = abs(GPVAL_Y2_MAX)>abs(GPVAL_Y2_MIN) ? GPVAL_Y2_MAX : (R0-1)*GPVAL_Y2_MIN/R0

set y2range[y2_min_new:y2_max_new]
replot
### end of code

结果:

enter image description here