MATLAB绘图:5.三维图形
三维图形
基本的三维绘图包括:
- 线型(Line)
- 网格型(Mesh)
- 区域型(Area)
- 面型(Surface)
- 方向矢量型(Direction)
- 容积型(Volumetric)
一.三维曲线图-plot3函数
-
plot3(x,y,z)
- 绘制三维空间中的坐标
- 要绘制由线段连接的一组坐标,将x,y,z指定为相同长度的向量
- 要在同一组坐标轴上绘制多组坐标,将x,y,z中的至少一个指定为矩阵,其他指定为向量
-
plot3(x,y,z,LineSpec)
- 指定使用的线型、标记和颜色绘图
-
plot3(x1,y1,z1,LineSpec1,……,xn,yn,zn,LineSpecn)
- 可以为每个三元组坐标指定特定的线型、标记和颜色。也可省略某些三元组的linespec参数
例子:
t=0:0.01:2*pi;
x1=sin(t).*cos(10*t);
y1=sin(t).*sin(10*t);
z1=cos(t);
x2=sin(t).*cos(12*t);
y2=sin(t).*sin(12*t);
z2=cos(t);
plot3(x1,y1,z1,'r-o','LineWidth',2)
plot3(x2,y2,z2,'g-s','LineWidth',2)
plot3(x1,y1,z1,x2,y2,z2,'b--')
axis equal
二.三维曲面图-surf、mesh函数
生成网络点阵
x-y平面内的点阵-----计算各个(x,y)坐标对应的z坐标
栅格数据的生成
[x,y]=meshgrid(x,y)
- 基于向量x和y中包含的坐标返回二维网格坐标。x是一个矩阵,每一行是x的一个副本;y也是一个矩阵,每一列是y的一个副本。坐标x和y表示的网格有length(x)个列*length(y)个行。
[x,y]=meshgrid(x)
- 等价于meshgrid(x,x),返回网格大小为length(x)*length(x)的方形网格坐标。
[x,y,z]=meshgrid(x,y,z)
[x,y,z]=meshgrid(x)
示例:
x=1:3;%生成1~3的向量(当作行向量)
y=1:4;%生成1~4的向量(当作列向量)
[x,y]=meshgrid(x,y)
%x和y变成矩阵,大小为x的行,y的列,不够的直接复制
网格曲面图–mesh
-
mesh(x,y,z)
- 创建一个网格图,该网格图为三维曲面,有实色边颜色,无面颜色
- 该函数将矩阵z中值绘制为由x和y定义的x-y平面中的网格上方的高度。边颜色因z指定的高度而异
-
mesh(z)
- 创建一个网格图,并将z中元素的列索引和行索引作为x和y坐标。
-
mesh(z,c)
- 进一步指定边的颜色
-
s=mesh(__)
- 将返回一个图曲面对象。在创建网格后,使用s修改网格图。有关属性列表,可参阅Surface属性
例子:
[x,y]=meshgrid(-8:.5:8);
R=sqrt(x.^2+y.^2)+eps;
%z确定高度
Z=sin(R)./R;
mesh(x,y,Z);
colorbar
%c指定颜色
C=x.*y;
mesh(x,y,Z,C)
colorbar
%指定值为0.5的FaceAlpha名称-值对组,以创建半透明网格曲面。
%要允许进一步修改,要将曲面对象赋值给变量s
[x,y]=meshgrid(-5:.5:5);
Z=y.*sin(x)-x.*cos(y);
s=mesh(x,y,Z,'FaceAlpha',0.5)
%设置facecolor属性
s.FaceColor='r';
三维曲面图–surf
-
surf(x,y,z)
- 创建一个三维曲面图,它是一个具有实色边和实色面的三维曲面
- 该函数将矩阵z中的值绘制为由x和y定义的x-y平面中的网格上方的高度。曲面的颜色根据z指定的高度而变化
-
surf(x,y,z,c)
- 还指定曲面的颜色
-
surf(z)
- 创建一个三维曲面图,并将z中元素的列索引和行索引作为x和y坐标。
-
s=surf(__)
- 将返回一个图曲面对象。在创建曲面后,使用s修改曲面。有关属性列表,可参阅Surface属性
例子:
[x,y]=meshgrid(1:0.5:10,1:20);
z=sin(x)+cos(y);
surf(x,y,z)
colorbar
%
c=x.*y;
surf(x,y,z,c)
colorbar
[x,y]=meshgrid(-5:.5:5);
z=y.*sin(x)-x.*cos(y);
s=surf(x,y,z,'FaceAlpha',0.5)
s.EdgeColor='none';
s.FaceColor='interp';
三.等高线图
-
contour(x,y,z)
- 指定z中各值的x和y坐标,绘制等高线图
-
contour(__,levels)
- 将levels指定为标量值n,以在n个自动选择的层级(高度)上显示等高线。要在某些特定高度绘制等高线,请将levels指定为单调递增值的向量。要在一个高度(k)绘制等高线,请将levels指定为二元素向量[k,k]。
-
contour(__,LineSpec)
- 指定使用的线型、标记和颜色绘图
-
[M,c]=contour(__)
- 返回一个等高线矩阵M,其中M(i,j)是第i行,第j列上的等高线。c是等高线对象。显示等高线后,使用c设置属性
例子:
[x,y,z]=peaks;
%peaks是从高斯分布转换和缩放得来的包含两个变量的函数,默认返回49*49的矩阵
surf(x,y,z)
%绘制等高线
contour(x,y,z,20)
contour3(x,y,z,20)
等高线图增加方向矢量和速度矢量
例子:
[x,y]=meshgrid(-2:.2:2);
z=x.*exp(-x.^2-y.^2);
[U,V]=gradient(z,.2,.2);
figure
contour(x,y,z)
hold on
quiver(x,y,U,V)
hold off
其他图表
- 热图heatmap
- 文字云图wordcloud
三维图形的高级设置
- 视点控制:view
- 颜色:colormap
- 光照控制
- camlight:设置并移动关于摄像头的光源
- lightangle:在球坐标系下设置或定位一个光源
- light:设置光源
- lighting:选择光源模式
- material:设置图形表面对光照的反应模式