如何在 Matlab 中将一条二维曲线绘制到颜色图上?
How can I plot a single 2-D curve onto a colormap in Matlab?
我在 Matlab 中使用现有的编译数据创建了一个平滑的颜色渐变二维等高线图。我将 x 轴、y 轴和 z 数据轮廓绘制为颜色图。我的目标是在颜色图上绘制一条二维曲线,表示单个 z 数据值,但我不知道如何实现。
有谁知道如何将 2-D 曲线绘制到 3-D 颜色图上?我已经为当前颜色图提供了 link,我希望在其上绘制单个 z 值作为曲线。
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
感谢@Cris Luengo for his comments directing me to contourc
. Notice that contourc
returns等值线。根据文档,
To compute a single contour of level k
, use 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
command can overlay anything you want on top. Or you can use contourf
and specify the contours marked, including 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-mesh 受数据限制,则您必须调整公差并根据您的喜好或数据限制进行调整。我只是简单地调整到下图,就没有再去修补了。
% 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 在评论中指出这一点)。
我在 Matlab 中使用现有的编译数据创建了一个平滑的颜色渐变二维等高线图。我将 x 轴、y 轴和 z 数据轮廓绘制为颜色图。我的目标是在颜色图上绘制一条二维曲线,表示单个 z 数据值,但我不知道如何实现。
有谁知道如何将 2-D 曲线绘制到 3-D 颜色图上?我已经为当前颜色图提供了 link,我希望在其上绘制单个 z 值作为曲线。
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
感谢@Cris Luengo for his comments directing me to contourc
. Notice that contourc
returns等值线。根据文档,
To compute a single contour of level
k
, usecontourc(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
command can overlay anything you want on top. Or you can use contourf
and specify the contours marked, including 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-mesh 受数据限制,则您必须调整公差并根据您的喜好或数据限制进行调整。我只是简单地调整到下图,就没有再去修补了。
% 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 在评论中指出这一点)。