2

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

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

当我这样做时,两个轴的“0”相互偏移。如何在不明确设置yrange两个量对称的情况下将一个 y 轴的零固定到另一个 y 轴的零?

4

3 回答 3

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
于 2019-06-18T16:59:14.987 回答
1

不幸的是,您不能(至少一般情况下不能)。如果 yrange 在 0 上下具有相同的百分比,它应该可以工作,例如:

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

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

于 2013-04-13T01:50:02.693 回答
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

结果:

在此处输入图像描述

于 2019-06-18T21:02:35.380 回答