我正在尝试使用breakyaxis多次破坏yaxis。从链接的评论中可以看出,其他人似乎也有多次中断y轴的问题。例如:

x = linspace(0,10,11);
y1 = 0.01*x;
y2 = -0.01*x + 5;
y3 = 0.05*x + 10;
plot(x,y1)
hold on
plot(x,y2)
plot(x,y3)
hold off


请注意,由于相对于方程式中的常数的斜率非常小,因此将图形绘制在一起将得到3条平直的线条。我想通过在y1和y2以及y2和y3之间将yaxis断开两次来显示斜率。但是,如果我尝试:

x = linspace(0,10,11);
y1 = 0.01*x;
y2 = -0.01*x + 5;
y3 = 0.05*x + 10;
plot(x,y1)
hold on
plot(x,y2)
plot(x,y3)
breakyaxis([0.15 4.85])
breakyaxis([5.05 9.95])
hold off


我收到一条错误消息:“ splitYLim必须在get(AX,'YLim')给定的范围内”。

仅使用1个breakyaxis函数即可正常工作。有没有办法可以使yaxis两次中断?

注意:这只是一个虚构的数据来解释我的问题,我必须将它们全部绘制在一张图中,因此拆分图不是解决方案。我不介意使用其他功能,只要可以将yaxis断开两次即可。

编辑:

我做了一些调试工作,并且错误消息来自breakyaxis的第72-75行。以下是触发错误消息的代码:

mainYLim = get(mainAxes,'YLim');
if (any(splitYLim >= mainYLim(2)) || any(splitYLim <= mainYLim(1)))
   error('splitYLim must be in the range given by get(AX,''YLim'')');
end


在第一个Breakyaxis中,mainYLim设置为[0,12],splitYLim设置为我指定的范围:[0.15,4.85]。

但是,在第二个Breakyaxis中,mainYLim设置为[0,1],并且splitYLim([5.05,9.95])在mainYLim的范围之外。

请注意,mainAxes在代码中之前定义为mainAxes = gca

因此,问题是由于在第二个Breakyaxis中,mainYLim报告的范围比我的绘图所需的范围小得多。我该如何解决?

最佳答案

我相信您应该使用归一化来相对显示斜率。

x = linspace(0,10,11);
y1 = 0.01*x;
y2 = -0.01*x + 5;
y3 = 0.05*x + 10;
plot(x,y1/norm(y1))
hold on
plot(x,y2/norm(y2))
plot(x,y3/norm(y3))
% breakyaxis([0.15 4.85])
% breakyaxis([5.05 9.95])
hold off
legend('y1','y2','y3')


matlab - Matlab多次破坏y轴-LMLPHP

10-04 16:22