感谢@Cris Luengo指导我的评论contourc
。请注意,它contourc
返回等值线。根据文件,
要计算 level 的单个轮廓k
,请使用contourc(Z,[k k])
这意味着我们可以识别等值线的特定值(的值Z
),
v = [.5 0.75 .85];
然后使用循环迭代地获取所需的信息
for k = 1:length(v)
Ck = contourc(x,y,Z,[v(k) v(k)]);`
end
这允许我们将信息传递到plot(...)
下面的代码中。
% MATLAB R2018b
x = 0:0.01:1;
y = 0:0.01:1;
[X,Y] = meshgrid(x,y);
Z = sqrt(X.^3+Y); % Placeholder
v = [.5 0.75 .85]; % Values of Z to plot isolines
figure, hold on
pcolor(X, Y, Z);
shading interp
colorbar
for k = 1:length(v)
Ck = contourc(x,y,Z,[v(k) v(k)]);
plot(Ck(1,2:end),Ck(2,2:end),'k-','LineWidth',2)
end
旧但有效:将在上述答案完成后删除
免责声明:可能有更简单的方法可以做到这一点。见底部注释。
x = 0:0.01:1;
y = 0:0.01:1;
[X,Y] = meshgrid(x,y);
Z = sqrt(X.^3+Y); % Placeholder
该plot
命令可以覆盖您想要的任何内容。或者您可以使用contourf
并指定标记的轮廓,包括突出显示单个轮廓。我已经说明了两种方法 - 我相信您正在寻找的方法hold on; plot(...)
如下所示和左图所示。
在左图中,您会看到我使用了逻辑索引。
val = 0.75; % Value of Z to plot contour for
tol = .002; % numerical tolerance
idxZval = (Z <= val+tol) & (Z >= val-tol);
这种方法的成功很大程度上取决于网格的精细程度Z
以及所需的公差 ( tol
)。如果Z网格受数据限制,则您必须调整容差并根据自己的喜好或数据的限制进行调整。我只是进行了调整,直到得到下图并且没有进一步修改。
% MATLAB 2018b
figure
subplot(1,2,1) % LEFT
pcolor(X, Y, Z); hold on
shading interp
xlabel('X')
ylabel('Y')
colorbar
val = 0.75; % Value of Z to plot contour for
tol = .002; % numerical tolerance
idxZval = (Z <= val+tol) & (Z >= val-tol);
plot(X(idxZval),Y(idxZval),'k-','LineWidth',2)
title('Bootleg approach for Z = 0.75')
subplot(1,2,2) % RIGHT
v =[0:.1:1.2] % values of Z to plot as contours
contourf(X,Y,Z,v)
colorbar
title('Contour plot specifying values v =[0:.1:1.2]')
编辑:
对于未来的访问者X
,如果、Y
和之间的关系Z
已知,例如,则可以通过求解方程直接从该关系(方程)中提取sqrt(X.^3 + Y) = Z
为特定值绘制一条曲线。Z
如果它基于数据而不是分析公式,那么这可能会更困难,而上面的方法可能会更容易(感谢@Cris Luengo在评论中指出这一点)。