MATLAB画图技巧与实例(二十二):三维等高线图contourslice切片函数
在之前的二维和三维等高线图中,本质都是三维显示,由X、Y和Z三个变量组成。
然而,实际应用时,往往会遇到更多变量。
例如,X、Y和Z表示每一个位置点坐标,V表示点的速度大小或温度等。
在三维坐标系中,目前还无法直接展示四维信息(某些软件可以绘制,但内部数据会被遮挡)。此时,就需要 做切片处理,即给定某一特殊平面,查看该平面的分布情况 。
在绘制等高线图时,就需要用到切片函数, contourslice 。
1 contourslice函数
1.1 用法
contourslice(X,Y,Z,V,xslice,yslice,zslice)
contourslice(V,xslice,yslice,zslice)
contourslice(___,num)
contourslice(___,lvls)
contourslice(___,method)
contourslice(ax,___)
s = contourslice(___)
contourslice(X,Y,Z,V,xslice,yslice,zslice) 在三维体数据 V 的切片中绘制等高线,其中 V 决定等高线的颜色。指定 X、Y 和 Z 作为坐标数据。使用以下形式之一指定 xslice、yslice 和 zslice 作为切片位置:要绘制一个或多个与特定轴正交的切片平面,请将切片参数指定为标量或向量。要沿曲面绘制单个切片,请将所有切片参数指定为定义曲面的矩阵。
contourslice(V,xslice,yslice,zslice) 使用 V 的默认坐标数据。V 中每个元素的 (x,y,z) 位置分别基于列、行和页面索引。
contourslice(___,num) 指定每个切片要绘制的等高线数量。此选项可与先前语法中的任何输入参数一起使用。
contourslice(___,lvls) 指定每个切片内要绘制等高线的位置处的值。
contourslice(___,method) 指定插值方法,其中 method 可以是 'linear'、'cubic' 或 'nearest'。
contourslice(ax,___) 在指定坐标区而不是当前坐标区 (gca) 中绘图。
s = contourslice(___) 返回创建的 Patch 对象。 [1]
1.2 示例1
首先介绍一下MATLAB的一个特殊函数,flow函数,即一个流场,其包含X、Y、Z和V四个参数。调用方法为
[X, Y, Z, V] = flow(n)
n越大,划分就越细致,n越小就越粗糙。
上图n为100,比较精细。为了能很好观看数据情况,这里做了切片处理。
上图n为10,就非常粗糙。n不能过大,否则会占用大量内存,绘制图形速度变慢,甚至直接死机。
如果我们绘制等高线图,如下所示
clc %更多文章,https://zhuanlan.zhihu.com/p/345799328
clear all
close all
[X, Y, Z, V] = flow(50);
xslice = [1 5 9];
yslice = [];
zslice = [];
contourslice(X,Y,Z,V,xslice,yslice,zslice);
view(3)
grid on
这里在x=1\5\9三个位置做了切片处理,并且通过view(3)命宁显示三维视角。
可以增加显示的等高线数目,例如100
clc %更多文章,https://zhuanlan.zhihu.com/p/345799328
clear all
close all
[X, Y, Z, V] = flow(50);
xslice = [1 5 9];
yslice = [];
zslice = [];
contourslice(X,Y,Z,V,xslice,yslice,zslice, 100);
view(3)
grid on
效果如下
1.3 示例2
同样的,我们也可以为其他轴添加切片。
clc %更多文章,https://zhuanlan.zhihu.com/p/345799328
clear all
close all
x = linspace(-5, 5, 100);
y = linspace(-5, 5, 100);
z = linspace(-5, 5, 100);
[X, Y, Z] = meshgrid(x, y, z);
V = sin(X).*cos(Y).*sin(Z);
xslice = [0];
yslice = [0];
zslice = [];
contourslice(X,Y,Z,V,xslice,yslice,zslice, 50);
view(3)
grid on
我们也可以自己定义一个特殊面,并在这个面上做切片,如下图所示。
clc %更多文章,https://zhuanlan.zhihu.com/p/345799328
clear all
close all
x = linspace(-5, 5, 100);
y = linspace(-5, 5, 100);
z = linspace(-5, 5, 100);
[X, Y, Z] = meshgrid(x, y, z);