2016-03-07 79 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)