【发布时间】:2015-07-25 16:33:24
【问题描述】:
我正在研究这个函数,它获取轴处理程序和数据,并且应该在轴上正确地绘制它。该函数在 for 循环中调用。它应该在一个图中绘制多个数据。我的结果图如下所示。
只有两个正确绘制的图形(具有四种颜色的图形)。其他人错过了在最终区域之前绘制的区域(红色区域是每个图表中最后绘制的区域)。但是每个轴的脚本都是相同的。那么错误可能在哪里呢?整个函数写在下面。
function [] = powerSpectrumSmooth(axis,signal,fs)
N= length(signal);
samplesPer1Hz = N/fs;
delta = int16(3.5*samplesPer1Hz); %last sample of delta frequncies
theta = int16(7.5*samplesPer1Hz); %last sample of theta frequncies
alpha = int16(13*samplesPer1Hz); %last sample of alpha frequncies
beta = int16(30*samplesPer1Hz); %last sample of beta frequncies
x=fft(double(signal));
powerSpectrum = 20*log10(abs(real(x)));
smoothPS=smooth(powerSpectrum,51);
PSmin=min(powerSpectrum(1:beta));
y1=[(smoothPS(1:delta)); zeros(beta-delta,1)+PSmin];
y2=[zeros(delta-1,1)+PSmin; (smoothPS(delta:theta)); zeros(beta-theta,1)+PSmin];
y3=[zeros(theta-1,1)+PSmin; (smoothPS(theta:alpha)); zeros(beta-alpha,1)+PSmin];
y4=[zeros(alpha-1,1)+PSmin; (smoothPS(alpha:beta))];
a1=area(axis,1:beta,y1);
set(a1,'FaceColor','yellow')
hold on
a2=area(axis,1:beta,y2);
set(a2,'FaceColor','blue')
a3=area(axis,1:beta,y3);
set(a3,'FaceColor','green')
a4=area(axis,1:beta,y4);
set(a4,'FaceColor','red')
添加
这是调用上述函数的函数。
function [] = drawPowerSpectrum(axesContainer,dataContainer,fs)
size = length(axesContainer);
for l=1:size
powerSpectrumSmooth(axesContainer{l},dataContainer{l},fs)
set(axesContainer{l},'XTickLabel','')
set(axesContainer{l},'YTickLabel','')
uistack(axesContainer{l}, 'top');
end
7 月 29 日添加
这是一个重现错误的脚本,因此您可以在您的计算机上运行它。在再次运行之前,您可能需要清除变量。
len = 9;
axesContainer = cell(len,1);
x = [0.1,0.4,0.7,0.1,0.4,0.7,0.1,0.4,0.7];
y = [0.1,0.1,0.1,0.4,0.4,0.4,0.7,0.7,0.7];
figure(1)
for i=1:len
axesContainer{i} = axes('Position',[x(i),y(i),0.2,0.2]);
end
dataContainer = cell(len,1);
N = 1500;
for i=1:len
dataContainer{i} = rand(1,N)*100;
end
for l=1:len
y1=[(dataContainer{l}(1:N/4)) zeros(1,3*N/4)];
y2=[zeros(1,N/4) (dataContainer{l}(N/4+1:(2*N/4))) zeros(1,2*N/4)];
y3=[zeros(1,2*N/4) (dataContainer{l}(2*N/4+1:3*N/4)) zeros(1,N/4)];
y4=[zeros(1,3*N/4) (dataContainer{l}(3*N/4+1:N))];
axes=axesContainer{l};
a1=area(axes,1:N,y1);
set(a1,'FaceColor','yellow')
hold on
a2=area(axes,1:N,y2);
set(a2,'FaceColor','blue')
hold on
a3=area(axes,1:N,y3);
set(a3,'FaceColor','green')
hold on
a4=area(axes,1:N,y4);
set(a4,'FaceColor','red')
set(axes,'XTickLabel','')
set(axes,'YTickLabel','')
end
这个脚本的结果如下图:
同样只有一张图片包含所有区域。
【问题讨论】:
-
请展示您的整个代码以及如果您将
hold off添加到函数的最后一行并将hold on移动到a1=...上方会发生什么? -
哇,“整个代码”是什么意思?这就像涉及6个功能。这是唯一重要的。我可以添加一个带循环的。当我在最后添加延迟时,没有任何变化。与上面a1的保持相同。
-
尝试发布一个用假数据重现这种效果的MVCE,这样我们就可以复制代码,试一试并调试它。否则将很难提供帮助!
-
@AnderBiguri 我不知道 MVCE 是什么意思,但我想我没有理解你的意思。脚本已添加。感谢您的回复。
-
你需要这样创建坐标区吗?
标签: matlab matlab-figure