2016-03-07 43 views
0

我有嵌套for循环中生成的矩阵中的数据。我只想绘制满足特定条件的数据(例如,它必须大于0.6)。数据点是否满足该条件,在我的mlist矩阵中存储为10Matlab绘制轮廓的指定条件的数据

什么是在Matlab中绘制这个最简单的方法?对于不符合条件的数据点,它可能只是空白区域。

xlist = linspace(-1,1,20); 
ylist = linspace(-2,2,30); 

zlist = zeros(length(xlist),length(ylist)); 
mlist = zeros(length(xlist),length(ylist)); 

% iteration counter 
ii = 0; 
jj = 0; 

for x = xlist 
    ii = ii + 1; 

    for y = ylist 
     z = sin(x*y); 
     jj = jj + 1; 
     zlist(jj) = z; 

     if z > 0.6 
      mlist(jj) = 1; 
     else 
      mlist(jj) = 0; 
     end 
    end 
end 

contourf(ylist,xlist,zlist) 

mesh(ylist,xlist,zlist) 
+1

我给这些值的'NaN',不妨一试。 –

回答

1

在MATLAB中“删除”图表中的数据而不需要实际从数据中删除数据的方式(因为您将遇到非均匀网格等问题)将被替换为NaN,因为大部分时间e MATLAB图将NaN视为缺失数据,并不会在该点上绘制任何内容。

你可以改变你的程序不使用循环为:

[x,y]=meshgrid(linspace(-1,1,20),linspace(-2,2,30)); 

z = sin(x.*y); 
zlist(z<0.6)=NaN; 
contourf(y,x,zlist); % // maybe x,y? 
0

最简单的方法,我相信,将是限制Z轴:

xlist = linspace(-1,1,20); 
ylist = linspace(-2,2,30); 
zlist = zeros(length(xlist),length(ylist)); 
mlist = zeros(length(xlist),length(ylist)); 

% iteration counter 
ii = 0; 
jj = 0; 

for x = xlist 
    ii = ii + 1; 
    for y = ylist 
     z = sin(x*y); 
     jj = jj + 1; 
     zlist(jj) = z; 
    end 
end 

contourf(ylist,xlist,zlist) 
mesh(ylist,xlist,zlist) 
zlim([0.6,max(z)]) 

和用于增加可见度,我会考虑改变contourf并网到电话:

surf(ylist,xlist,zlist)