【发布时间】:2015-06-10 05:42:39
【问题描述】:
我想使用 Matlab 制作一个在某一点停止的图。
这是使用scatter 的情节:
但是,我希望情节是平滑的曲线,而不是分散的点。如果我使用plot,它会给我:
我不想要垂直线。
我觉得可以手动把函数分成两块,分别画在一张图上,但问题是我手头不知道断点在哪里。
有没有好的解决方案?谢谢。
【问题讨论】:
我想使用 Matlab 制作一个在某一点停止的图。
这是使用scatter 的情节:
但是,我希望情节是平滑的曲线,而不是分散的点。如果我使用plot,它会给我:
我不想要垂直线。
我觉得可以手动把函数分成两块,分别画在一张图上,但问题是我手头不知道断点在哪里。
有没有好的解决方案?谢谢。
【问题讨论】:
要查找数据中的跳转,可以搜索函数导数最大的地方:
[~,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')
到目前为止,所有方法都只处理一次跳跃。要处理函数中任意数量的跳转,需要了解这些跳转有多大或有多少跳转。不过,解决方案将是类似的。
【讨论】:
您应该遍历数据并找到两个连续点之间距离最大的索引。将您的数组从该索引中拆分为两个单独的数组并分别绘制它们。
【讨论】: