如何在Matlab中将单个2D曲线绘制到颜色图上?

时间:2019-06-26 20:21:13

标签: matlab plot contourf shading

我已经使用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

1 个答案:

答案 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

这使我们可以通过以下代码将信息传递到plot(...)
Drawing Isolines with contourc

% 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 网格受数据限制,则必须调整公差并根据自己的喜好或数据限制进行调整。我只是简单地进行调整,直到得到下面的数字,然后才进一步修改。

(Left) My bootleg approach. (Right) Using built-in functionality.

% 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]')

修改:
对于未来访问者,如果XYZ之间的关系是已知的,例如sqrt(X.^3 + Y) = Z,然后可以通过求解方程式直接从该关系(方程式)中提取特定Z值的一条曲线。如果它是基于数据而不是分析公式,则可能会更加困难,并且上面的方法可能会更容易(感谢@ Cris Luengo,以便在注释中指出)。