我目前正在使用'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也不会抛出任何错误,因此输入大小似乎没有问题。有没有人知道问题可能是什么?
答案 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');