【问题标题】:How to plot a sparse data stream with curves如何用曲线绘制稀疏数据流
【发布时间】:2013-01-24 09:47:28
【问题描述】:

编辑:我想根据以下代码制作一个情节:

function one(varargin)
    thresh = 200;
    setenv GNUTERM 'x11';
    x = [0.05:0.05:10];
    x = transpose(x);
    y = rand(200, 1); 
    y(y <= 0.9) = 0.9;
    plot(x, y); 
    xlabel('time');
    ylabel('values above thresh');
end

...问题是,我不希望它只是跳跃点。很高兴看到值从一个到下一个平滑波动(如贝塞尔曲线)。这可能吗? 我不知道我是否需要一个外部库,但如有必要,我愿意走那条路。以任何数据分辨率导出结果(平滑)图会很好。

【问题讨论】:

    标签: plot gnuplot octave


    【解决方案1】:

    如果我没看错,您只是想对这些信息进行下采样,这是一项非常简单、高效的 octave 任务。

    假设 xi,yi 作为您的原始数据集,您希望进行大约 10 倍的下采样:

    生成一个新的 x 向量,xp(假设 xi 是单调递增的):

    xp = linspace(xi(1),xi(end),round(length(xi)/10)); 
    

    然后用样条法进行插值:

    yp = interp1(xi,yi,xp,'spline');
    

    但是,这只会平滑插值数据。

    我并没有真正理解您的部分问题 - 您如何定义基本部分?

    另一种方法是在下采样之前过滤数据,例如,使用 Savitsky-Golay 过滤器。有趣的是,您可以使用一些参数。默认:

    yp = sgolayfilt (yi);
    

    此过滤器使用 p 阶和长度 n 的平滑多项式来处理您的数据。如果您指定 p 和 n,您可以尝试最有效的方法:

    yp = sgolayfilt (yi, p, n);
    

    【讨论】:

    • 这很棒也很有趣!不幸的是,我正在寻找的是一种在点之间绘制平滑曲线的方法,以便绘图显示得更漂亮一些。这不是我想更改数据集的地方。如果我应该更新我的问题,请告诉我。
    • 我已经修改了我的问题,希望它现在更清楚,包括我希望顺利绘制的数据流类型的一个非常直接的示例。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2017-07-01
    • 2020-10-29
    相关资源
    最近更新 更多