Matlab Plot Smoothing没有效果

时间:2014-02-27 15:15:19

标签: matlab plot smoothing

我目前正在使用'smooth'命令遇到一些麻烦,即它似乎对生成的绘图没有影响。我已经使用以下脚本生成了一个情节

for h=1:4
    linespec = {'rx', 'gx', 'bx', 'yx'};
    hold on
    for b=1:365
        y=mean(mean(A(b,6*(h-1)+1:6*h)));
        p(h)=plot(b,y,linespec{h});
    end
    hold off
end

在数据集A中逐行,并取前六列中的值的平均值,然后是第7列到第12行,第13行到第18行和第19列到第14列;总共生成四个地块。

下一步是通过在9的范围内平均值来平滑结果图。所以,我将脚本调整为以下内容;

for h=1:4
    linespec = {'rx', 'gx', 'bx', 'yx'};
    hold on
    for b=1:365
        y=mean(mean(A(b,6*(h-1)+1:6*h)));
        w = smooth(y,9,'moving');
        p(h)=plot(b,w,linespec{h});
    end
    hold off
end

基本上只是在plot命令中添加w变量并将y替换为w。然而,这对我的情节没有任何影响。 Matlab也不会抛出任何错误,因此输入大小似乎没有问题。有没有人知道问题可能是什么?

1 个答案:

答案 0 :(得分:0)

在循环的任一版本中,您似乎正在针对y的各个值绘制b的单个值。那么,我认为y是单个值。您无法平滑点,因此smooth操作无效。

从一开始,您不需要循环来计算各种方法; mean可以采用2D矩阵并返回向量。一次计算y,然后平滑该向量(应该有长度365,我推测 - 取决于输入A的大小)。 e.g:

b = 1:365;
y=mean(A(:,6*(h-1)+1:6*h),2);
w = smooth(y,9,'moving');
plot(b,y,'rx');
hold on
plot(b,w,'gx');