linkaxes
有第二个输入,允许你连接x,y,或两个轴。然而,由于y轴有不同的比例
linkaxes
功能对你没有用处。
中演示了不同尺度的连接轴
这个答案
但是因为这个答案使用了重叠的坐标轴
链接
“x轴和y轴,我对演示做了一些调整,如下所示
链接
两个图之间的y轴。
唯一的“
输入
在整个代码中
斧头
哪个是轴柄的1x2向量
(ax₁,ax2)
在哪里
ax₁
左轴是和吗
ax2
为右轴手柄。
这个过程并不简单,因为您必须手动缩放坐标轴,使用侦听器,并调整“恢复视图”工具栏按钮的行为。如果需要,请参阅上面提到的答案以获得详细的描述和评论。在R2020b和R2021a中测试。
附件
- linkedYAxesDiffScale.m-这个答案的完整演示。
- linkedYAxesDiffScale_UI.m这个答案的完整演示修改为使用ui图形和ui轴。
0.设置演示图
我们的目标是连接具有不同比例的y轴。
y = randn (1500) * 50 + 500;
直方图(y-mean (y), 20岁,“定位”,“水平”)
重要的是:
在继续之前,应该使用
ylim ()
在两个轴上(未显示)。在使用自动y限制模式的简单演示中,y限制已经被理想地设置了。
1.关闭轴2的交互作用(右)
所有的缩放/平移都应该在左边的1号轴上完成。
2.设置一个侦听器,它将响应轴#1(左)的y轴限制变化
= range(ax(2).YLim) / range(ax(1).YLim);
axBaseLim = [ax (1) .YLim;斧子(2).YLim];
斧子(1).UserData。侦听器= addlistener (ax (1) {“YLim”},“PostSet”,...
@ axisLimitListener (~ ~) ([], [], [ 斧子(1),ax (2)), xyscale, axBaseLim));
3.解决“恢复视图”按钮的问题
当您按下1号轴工具栏中的“恢复视图”按钮时,这个监听器将不会响应。为了解决这个问题,下面的这个块和下面的“myRestoreButtonCallbackFcn”块将更新轴#2,当轴#1的“恢复视图”按钮被按下时。
axTB = axtoolbar (ax (1),“默认”);
isRestoreButton = strcmpi ({axTB.Children.Icon},“restoreview”);
restoreButtonHandle = axTB.Children (isRestoreButton);
originalRestoreFcn = restoreButtonHandle.ButtonPushedFcn;
restoreButtonHandle。ButtonPushedFcn =...
{@myRestoreButtonCallbackFcn, ax(2), originalRestoreFcn, xyscale, axBaseLim};
4.定义响应轴#1中y轴限制更改的侦听器
函数axisLimitListener (~, ~, ax, scalingFactor axBaseLim)
normLowerLimit = (ax(1). ylim (1) - axBaseLim(1,1))./range(axBaseLim(1,:));
newLimits = normLowerLimit.*range(axBaseLim(2,:)) + axBaseLim(2,1);
newLimits(:,2) = newLimits + range(ax(1). ylim).*scalingFactor;
集(ax (2),“YLim”newLimits)
5.定义响应1号轴工具栏>恢复视图的“恢复视图”回调
函数myRestoreButtonCallbackFcn(hobj, event, ax2, originalCallback, xyscale, axBaseLim)
originalCallback (hobj、事件)
axisLimitListener ([] [], [event.Axes, ax2], xyscale, axBaseLim)