问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MATLAB等高线图绘制完全指南:从基础到进阶技巧

创作时间:
作者:
@小白创作中心

MATLAB等高线图绘制完全指南:从基础到进阶技巧

引用
CSDN
1.
https://m.blog.csdn.net/weixin_44209907/article/details/138139729

本文将详细介绍MATLAB中绘制等高线图的各种技巧,包括添加层级标签、改变填充颜色、突出显示特定层级、合并箭头图以及创建带有主次网格线的等高线图。每个示例都配有具体代码和解释,帮助读者快速掌握这些实用技巧。

1. 为等高线图添加层级标签

此示例如何用相关值标记等高线。等高线矩阵C是由contourcontour3contourf返回的一个可选输出参数。clabel函数使用来自C的值显示二维等高线的标签。

以下代码显示peaks函数的八个等高线层级。clabel只标记其大小足以容纳内联标签的等高线。

Z = peaks;
figure
[C,h] = contour(Z,8);
clabel(C,h)
title('Contours Labeled Using clabel(C,h)')

要以交互方式用鼠标选择要标记的等高线,请将manual选项传递给clabel,例如

clabel(C,h,'manual')

当鼠标处于图窗中时,该命令会显示一个十字准线光标。点击鼠标,会标记离光标最近的等高线。

2. 改变等高线图的填充颜色

此示例演示如何更改已填充等高线图的颜色。

2.1 更改颜色图

通过改变颜色图设置已填充等高线图的颜色。将预定义的颜色图名称hot传递给colormap函数。

[X,Y,Z] = peaks;
figure
contourf(X,Y,Z,20)
colormap(hot)
title('Hot Colormap')

2.2 控制颜色值到颜色图的映射

通过将颜色图范围设置为比矩阵Z中的值大得多的范围值,保证只使用hot颜色图中间的颜色。clim函数用于控制数据值到颜色图的映射。使用此函数设置颜色图范围。

clim([-20,20])
title('Center of Hot Colormap')

如果使用的matlab版本低于R2022a ,使用caxis([-20 20])更改颜色图范围。

3. 突出显示特定等高线层级

此示例演示如何突出显示特定层级的等高线。

Z定义为从peaks函数返回的矩阵。

Z = peaks(100);

Z中的最小和最大数据值四舍五入取整,并分别将这些值存储到zminzmax中。将zlevs定义为40 个介于zminzmax之间的值,并绘制等高线图。

zmin = floor(min(Z(:)));
zmax = ceil(max(Z(:)));
zinc = (zmax - zmin) / 40;
zlevs = zmin:zinc:zmax;
figure
contour(Z,zlevs)

zindex定义为zminzmax之间索引值为 2 的整数值向量。

zindex = zmin:2:zmax;

保留之前的等高线图。创建第二个等高线图并使用zindex每隔一个整数值突出显示等高线。将线宽设置为 2。

hold on
contour(Z,zindex,'LineWidth',2)
hold off

4. 合并等高线图和箭头图

在同一绘图上显示等高线和梯度向量。

沿 x 和 y 方向在从 -2 到 2 的网格上绘制 10 条

等高线。

[X,Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);
contour(X,Y,Z,10)

使用gradient函数计算Z的二维梯度。gradient函数会返回U作为 x 方向上的梯度,返回V作为 y方向上的梯度。使用quiver函数显示指示梯度值的箭头。

[U,V] = gradient(Z,0.2,0.2);
hold on
quiver(X,Y,U,V)
hold off

5. 带有主网格线和次网格线的等高线图

您可以通过拆分数据并创建两个重叠的等高线图来创建突出所选等高线的等高线图。

例如,创建peaks函数的等高线图,其中偶数编号的等高线为实线,奇数编号的等高线为虚线。为偶数编号的水平绘制一个等高线。然后,在其上覆盖以虚线为奇数编号的水平绘制的第二个等高线图。

major = -6:2:8;
minor = -5:2:7;
[cmajor,hmajor] = contour(peaks,'LevelList',major);
clabel(cmajor,hmajor)
hold on
[cminor,hminor] = contour(peaks,'LevelList',minor);
hminor.LineStyle = ':';
hold off
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号