Matlab:不连续图的绘制

5
我想在Matlab中制作一个在某一点处中断的图。 使用scatter时,图像如下所示: enter image description here 但是,我希望图像是平滑的曲线而不是散点。 如果我使用plot,则会给出以下结果: enter image description here 我不想要垂直线。
我认为我可以手动将函数分成两个部分,并在一个图中分别绘制它们,但问题在于我不知道断点在哪里。
有没有好的解决方案? 谢谢。
2个回答

6
要找到数据跳跃的位置,您可以搜索函数导数最大的位置:
[~,ind] = max(diff(y));

一种绘制该函数的方法是将该点设置为NaN并像平常一样绘制该函数:

y(ind) = NaN;
plot(x,y);

这种方法的缺点是会丢失一个数据点。为了避免这种情况,您可以在中间添加一个值为NaN的数据点:

xn = [x(1:ind), mean([x(ind),x(ind+1)]), x(ind+1:end)];
yn = [y(1:ind), NaN, y(ind+1:end)];
plot(xn,yn);

另一个解决方案是将绘图的向量拆分:

plot(x(1:ind),y(1:ind),'-b', x(ind+1:end),y(ind+1:end),'-b')

到目前为止,所有的方法都只处理了一次跳跃。为了在函数中处理任意数量的跳跃,需要知道这些跳跃有多大或者有多少个跳跃。然而,解决方案是类似的。


1
你可以在中间加入一个值为NaN的不存在的点,这样就不会丢失数据点。 - Andrey Rubshtein
@Andrey 感谢您的建议。在第一版答案中我有考虑过这个解决方案,但后来决定放弃它并添加如何拆分图表的方法。为了完整起见,我又加上了那部分内容。 - hbaderts

1

你应该遍历你的数据,并找到相邻两点之间距离最大的索引。从该索引处将数组分成两个独立的数组并分别绘制它们。


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