我想在Matlab中制作一个在某一点处中断的图。 使用scatter时,图像如下所示:
但是,我希望图像是平滑的曲线而不是散点。 如果我使用plot,则会给出以下结果:
我不想要垂直线。
我认为我可以手动将函数分成两个部分,并在一个图中分别绘制它们,但问题在于我不知道断点在哪里。
有没有好的解决方案? 谢谢。
![enter image description here](https://istack.dev59.com/00JCa.webp)
![enter image description here](https://istack.dev59.com/oyBzz.webp)
我认为我可以手动将函数分成两个部分,并在一个图中分别绘制它们,但问题在于我不知道断点在哪里。
有没有好的解决方案? 谢谢。
[~,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')
到目前为止,所有的方法都只处理了一次跳跃。为了在函数中处理任意数量的跳跃,需要知道这些跳跃有多大或者有多少个跳跃。然而,解决方案是类似的。
你应该遍历你的数据,并找到相邻两点之间距离最大的索引。从该索引处将数组分成两个独立的数组并分别绘制它们。