【问题标题】:Matlab: discontinuous plotMatlab:不连续图
【发布时间】:2015-06-10 05:42:39
【问题描述】:

我想使用 Matlab 制作一个在某一点停止的图。

这是使用scatter 的情节:

但是,我希望情节是平滑的曲线,而不是分散的点。如果我使用plot,它会给我:

我不想要垂直线。

我觉得可以手动把函数分成两块,分别画在一张图上,但问题是我手头不知道断点在哪里。

有没有好的解决方案?谢谢。

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    要查找数据中的跳转,可以搜索函数导数最大的地方:

    [~,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')
    

    到目前为止,所有方法都只处理一次跳跃。要处理函数中任意数量的跳转,需要了解这些跳转有多大或有多少跳转。不过,解决方案将是类似的。

    【讨论】:

    • 您可以在中间添加一个不存在的点,NaN val,这样您就不会丢失数据点。
    • @Andrey 感谢您的建议。我在答案的第一个修订版中有这个,但后来决定放弃该解决方案并添加如何拆分情节。为了完整起见,我再次添加了该部分。
    【解决方案2】:

    您应该遍历数据并找到两个连续点之间距离最大的索引。将您的数组从该索引中拆分为两个单独的数组并分别绘制它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多