Matlab多次打破y轴

3

我正在尝试使用 breakyaxis 多次打破 y 轴。正如链接评论中所见,其他人似乎也有多次打破 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之间两次打断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)
breakyaxis([0.15 4.85])
breakyaxis([5.05 9.95])
hold off

我收到一个错误消息,内容为:“splitYLim 必须在 get(AX,'YLim') 给定的范围内”。只使用一次 breakyaxis 函数可以完美地运行。有没有办法我可以两次打断我的 y 轴?注意:这只是一个编造的数据,用于解释我的问题,并且我必须将它们全部绘制在一个图表中,因此分割图表不是解决方案。我不介意使用其他函数,只要我能够两次打断我的 y 轴。编辑:我进行了更多调试,错误消息来自于 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报告的范围比我的绘图需要的范围要小得多。我该如何解决?

在第一个breakyaxis之后输入 get(ax,'ylim'),你会得到什么? - Adiel
您还可以使用较小的y值和间隔,以便查看斜率,在绘制后只需更改“yticklabels”。 - Adiel
@Adiel 如果我输入 get(ax,'ylim'),我会得到ax未定义的变量。请查看我的编辑以获取有关问题的更多详细信息。 - Hosea
因为您没有像您刚刚添加的编辑一样对其进行定义。也许在第二个命令中尝试输入[0.505 0.995],因为调用一次后,ylim 被转换为[0 1]。您需要继续调试它,并进行一些试错,如果您不知道如何阅读代码。 - Adiel
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')

enter image description here


1
虽然你的解决方案在某些情况下可能很好,但对于我的情况,在归一化后解释图形是棘手且不建议的。我特别想要在我的数据可视化中两次打破y轴。 - Hosea
我可以知道为什么吗? - Mohammad nagdawi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接