一、非常规坐标图
1.semilogx(X,Y,S) / semilogy(X,Y,S) 单对数坐标图
semilogx / semilogy能够绘制出对数函数的坐标图,其调用方式与功能和plot()函数相似(使用方法参考上一节的plot函数),且绘制出来的坐标图仅有一个方向为对数坐标形式(x/y)
其效果如下:
x=0:0.1:5;
y=log10(x);
subplot(2,1,1); %回忆一下subplot的计数顺序是先行还是先列的
plot(x,y,'-.ko') %k为黑色,o指的是圆圈标记
subplot(2,1,2);
semilogx(x,y,'--gv') %g为绿色,v指的是向下三角形
2.contour / clabel 曲面等高线/等高线标签
该标签理解上较难,但是平时的使用频率也较小,稍微理解即可
在绘制曲面等高线时,这两个函数常成对出现。clabel需要用 contour函数的输出作为输入,才能在等高线图上添加表示数量的大小的标签。调用格式常用的有以下几种:
(1)contour(Z)
画出Z矩阵的二维等高图(Z为表示按照x-y位置顺序排列好的经过函数处理得出来的z坐标矩阵),矩阵Z至少为2*2大小,在contour函数处理后会返回处理好了的关于等高线坐标的矩阵,需要设计代码接收,且等高线条数及数值是基于Z的最大值和最小值自动选取的。
(2)contour(Z,n)
当n为number时,n的添加表示指定的等高线条数;当n为向量时,n的添加同时控制等高线的数值及等高线条数。
(3)contour(Z,......,LineSpec)
参数LineSpec表示指定线形、标记符号及颜色,具体调用方式与plot相似。
下面根据一个例子来尝试理解一下,内部带有解释:
z=[1 2 3;4 5 6;7 8 9] %Z是已经处理好的对应x-y位置的z坐标数值矩阵
[c,h]= contour(z,3); %将Z代入contour函数,后面的“3”为数字型表示的等高线的条数,
%返回的是两个值,第一个值c是关于等高线各点坐标的矩阵,
%第二个值h是等高线各项绘画的参数,用于指导如何根据所给的坐标画出圆等高线
clabel(c,h); %然后将两个参数代入clabel函数
colorbar %给各等高线添加不同的颜色
在上述代码中,contour函数返回的c,h值分别是关于等高线各点坐标的矩阵和等高线各项绘画的参数,用于指导如何根据所给的坐标画出圆等高线,下面稍微解释一下返回的c与h均为什么:
(本例子的z坐标矩阵,与上面描绘出的等高线相比可知其坐标分布成上下颠倒分布)
而返回的c值为一个两行多列的矩阵,在本例中则为一个两行十三列的矩阵,其中可以将矩阵分为多个部分,若下面分为三个部分。其中每部分的第一行第一列(左上角元素)是该部分要画的等高线坐标值,三个部分分别为“3”,“5”,“7”;然后第二行第二列(左下角元素)是该部分要话的等高线所需要的坐标个数,三个部分分别为“3”,“4”,“3”;后面各部分除去第一列都表示坐标(x,y)x位于第一行,y位于第二行,例如第一个部分所需要的三个坐标点则为(1,1.667)(2,1.3333)(3,1),每条等高线所需要的坐标点个数取决于系统计算,描绘的曲线越复杂所需的坐标点就越多。
返回的h值为一个属性集合,内部都储存着画该等高线的各式参数包括了等高线值,画线颜色、宽度、样式等等,若需要修改该等高线的样式,可以在contour函数中自定义。
若需要将等高线画成点线:(修改上述句子为)
[c,h]= contour(z,3, 'linestyle',':');
二、各类三维绘图函数
1.mesh 绘制三维网格图
(1)mesh(Z)
若已知Z坐标对应X-Y坐标的数值解矩阵,则可以直接使用mesh(Z)绘制图像,当[m,n]=size(Z),即Z矩阵为m行n列时,图像的坐标轴则为X=1:n,Y=1:m,其颜色由高度决定。
z=[1 2 3;4 5 6;7 8 9]
mesh(z)
xlabel('X')
ylabel('Y')
zlabel('Z')
其效果为:
(2)mesh(X,Y,Z)
若已知Z坐标对应X-Y坐标的数值解矩阵,生成由X、Y、Z定义的网格图,且当X、Y分别为长度为m、n的向量,(n,m)=size(Z),则可以生成交点为[X(i,j),Y(i,j),Z(i,j)]的交点矩阵,其与mesh(Z)的差别就是能够自定义其坐标范围。
例如:
z=[1 2 3;4 5 6;7 8 9];
x=[4:6];
y=[7:9];
mesh(x,y,z)
xlabel('X')
ylabel('Y')
zlabel('Z')
其效果为:
(3)meshgrid()
根据参量个数使用其向量坐标创建一/二/三维网格坐标矩阵。方便在三维绘图时提供平面,且可以运用于位置未知Z坐标数值解矩阵前提,可以直接利用Z与X、Y的关系式求出三维图形,具体使用方法为:
(i)[X,Y]=meshgrid(x,y)
根据向量x和y中包含的坐标返回一个二维网格坐标网络
(ii)[X,Y]=meshgrid(x)
与(i)类似,返回的网格大小为length(x)*length(y)的方形网格坐标
(iii)[X,Y,Z]=meshgrid(x,y,z)
与(i)类似,返回的网格大小为length(y)*length(x)*length(z)
以下为一个具体示例:
[X,Y]=meshgrid(-8:.5:8);
R=sqrt(X.^2+Y.^2);
Z=sin(R)./R;
mesh(X,Y,Z);
xlabel('X')
ylabel('Y')
zlabel('Z')
在上述代码中,先设置了一个X-Y坐标矩阵,然后根据Z对于X、Y的关系列出其关系式(中间设置了一个中间变量R),注意在矩阵对于内部的每个元素值运算处理需要用点运算(.*点乘 ./ 点除 .^ 点乘方),根据其关系式画出了一个三维中的Z=sinc(x,y)函数。
上述方法在已知X、Y、Z关系式求其三维图形非常适用,读者可以多加练习掌握其中技巧。
2.surf函数
surf函数用于绘制平滑的三维曲面,在绘制出来的曲面是通过在所给数据点中间进行插值法来创建的,但是由于其差值处理的特性,在数据量庞大的时候绘制速度就不如mesh函数;同样,它自身也有优点,surf函数绘制出来的曲面图能够使用颜色和光照来表示去曲面的高度变化,而mesh函数则不行。
其调用方式如下:
[X,Y]=meshgrid();
surf(X,Y,Z);
其调用方式跟mesh函数一样,就上述的例子而言:
[X,Y]=meshgrid(-8:.5:8);
R=sqrt(X.^2+Y.^2);
Z=sin(R)./R;
surf(X,Y,Z);
xlabel('X')
ylabel('Y')
zlabel('Z')
每个平面都是平滑平面
对mesh函数和surf函数进行一个简单的总结 :surf函数适用于需要可视化平滑曲面的情况,而mesh函数适用于需要显示数据的网格结构和形态的情况。具体选择哪个函数取决于你的需求和做要表达的数据特征。
3.plot3函数
plot3函数用于在三维空间内绘制连续的曲线或散点图,其实现的效果就是曲线在三维空间里面的移动趋势图,具体调用方式为:
plot3(X,Y,Z,LineSpec)
其中X、Y、Z是包含数据点坐标的向量或者矩阵,而LineSpec则是样式参数,下面给出一个具体的例子了解其使用方式:
% 创建数据
t = linspace(0, 2*pi, 100);
x = cos(2*t);
y = sin(2*t);
z = t;
% 绘制三维曲线
plot3(x, y, z, 'b-', 'LineWidth', 2);
% 设置坐标轴标签和标题
xlabel('X');
ylabel('Y');
zlabel('Z');
title('3D Curve Plot');
% 设置其他参数(可选)
grid on; % 显示网格
axis equal; % 设置坐标轴刻度相等
其实现效果为:
三、分享总结
以上是给大家分享的全部matlab绘图知识点总结啦,希望大家在读完之后有所收获,若有错漏或者补充的可以跟我联系,有什么问题可以在评论区留言,或者私聊我,我会力所能及的帮助一同学习的人。大家一同进步吧!这部分的知识点到这就告一段落啦,谢谢大家!