我已经使用Matlab中的现有已编译数据创建了平滑的颜色渐变二维轮廓图。我有一个x轴,y轴和z数据轮廓绘制为颜色图。我的目标是在颜色图上绘制2D曲线,以表示单个z数据值,但我不知道如何。有谁知道如何将2D曲线绘制到3D色彩图上?我提供了指向当前颜色图的链接,我希望在该颜色图上绘制单个z值作为曲线。 Existing colormap
x = 0.05:0.05:1;
y = 0.0:0.05:1;
[X, Y] = meshgrid(x, y);
Z = [data]
contourf(X, Y, Z);
pcolor(X, Y, Z);
shading interp
title()
xlabel()
ylabel()
colorbar
答案 0 :(得分:2)
感谢@ Cris Luengo的评论将我引向contourc
。请注意,contourc
返回等值线。根据文档,
要计算级别
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
% 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
并指定标记的轮廓,包括highlighting individual contours。我已经说明了两种方法-我相信您正在寻找的方法会使用hold on; plot(...)
,如下所示,并带有 left 图片。
在左图中,您将看到我使用了逻辑索引。
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,以便在注释中指出)。