0

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

在 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)
4

2 回答 2

1

在 MATLAB 的图中“删除”数据而无需实际从数据中删除(因为您会遇到非均匀网格等问题)将其替换为NaN,因为大多数 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?
于 2016-03-07T10:34:38.727 回答
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 和 mesh 调用更改为:

surf(ylist,xlist,zlist)
于 2016-03-07T09:23:04.243 回答