3

我试图通过使用 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 报告的范围远小于我的绘图所需的范围。我该如何解决?

4

1 回答 1

0

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

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')

在此处输入图像描述

于 2018-02-01T03:34:22.750 回答