Matlab 使用 contourf 绘制具有指定条件的数据
Matlab plotting data with specified condition with contourf
我在嵌套 for 循环中生成的矩阵中有数据。我只想绘制满足特定条件的数据(例如,它必须大于 0.6
)。数据点是否满足该条件在我的 mlist
矩阵中存储为 1
或 0
。
在 Matlab 中绘制此图的最简单方法是什么?对于不满足条件的数据点,可以直接白space.
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)
我认为最简单的方法是限制 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)
关于 "removing" 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?
我在嵌套 for 循环中生成的矩阵中有数据。我只想绘制满足特定条件的数据(例如,它必须大于 0.6
)。数据点是否满足该条件在我的 mlist
矩阵中存储为 1
或 0
。
在 Matlab 中绘制此图的最简单方法是什么?对于不满足条件的数据点,可以直接白space.
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)
我认为最简单的方法是限制 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)
关于 "removing" 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?