【问题标题】:Matlab breaking yaxis multiple timesMatlab多次破坏yaxis
【发布时间】:2018-07-11 03:06:34
【问题描述】:

我试图通过使用breakyaxis 多次破坏 yaxis。从链接的 cmets 中可以看出,其他人似乎也有多次破坏 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 报告的范围远小于我的绘图所需的范围。我该如何解决?

【问题讨论】:

  • 如果在第一个 braekyaxis 之后输入 get (ax,'ylim') 会得到什么?
  • 你也可以使用小的 y 值和区间,这样你就可以看到斜率,并且在绘图之后改变yticklabels
  • @Adiel 如果我输入get (ax,'ylim'),我会发现 ax 是未定义的变量。有关该问题的更多详细信息,请参阅我的编辑。
  • 因为您没有像在刚刚添加的编辑中那样定义它。也许尝试在第二个命令中输入 [0.505 0.995],因为在一次调用之后 ylim 被转换为 [0 1]。你需要继续调试它,如果你不知道在那里阅读代码,需要一些试验和错误

标签: matlab plot yaxis


【解决方案1】:

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

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

【讨论】:

  • 虽然您的解决方案在某些情况下可能很好,但在我的案例标准化后解释图表很棘手,不推荐。我特别想打破我的 yaxis 两次以进行数据可视化。
  • 我能知道为什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
相关资源
最近更新 更多