我有一个数据文件,第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
设置为两个量的对称?
答案 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
结果: