目录
1.二维作图
基本命令plot(根据数据点画图),fplot(根据函数表达式画图),ezplot(隐函数和参数画图)。
plot(离散的):绘制离散的点,x,y需要输入的是向量,所以需要注意的是当使用*和^时需要在前面加.
fplot(连续的):绘制连续的曲线,输入一个函数表达式。
话不多说,咱们直接上图演示
plot散点画图
参数解释:plot(x,y,'*r'),*r代表曲线的离散点由*表示,且为红色。
x=0:0.2*pi:2*pi;%代表0到2Π范围内,以0.2Π为间隔取点,也就是我们所熟悉的步长、公差。
y=sin(x);
plot(x,y,'*r')
当我们去掉*,系统就会默认帮我们用线连接起来
x=0:0.2*pi:2*pi;
y=sin(x);
plot(x,y,'r')
当我们缩小间隔,增加数据点,图像也就越来越像原函数。
x=0:0.01*pi:2*pi;
y=sin(x);
plot(x,y,'*r')
把上面的*改成字母o会得到圆圈效果。
大家也可以尝试下多种符号。比如+、-、--等等
fplot函数表达式画图
fplot(f,x_axis,style)
参数解释:
f代表关于自变量x的表达式
x_axis代表自变量的范围。
style代表样式属性,类似前面plot的第三个参数。
fplot(@(x)cos(x),[0,2*pi],'r')
标识符@(x)代表对自变量x进行的绘图。就比如@(a)代表对自变量a进行的绘图
[0,2*pi]代表自变量x的范围,‘r’代表画图的颜色为红色。
接下来绘制参数曲线
fplot(@(t)sin(t),@(t)cos(t),[0,2*pi],'r')
ezplot隐函数作图
ezplot('sin(x)',[0,pi])
ezplot('cos(t)^3','sin(t)^3',[0,2*pi])
ezplot('x^2+y^2-1',[-1,1,0,1])
2.三维作图
plot3、mesh、surf
plot3
绘制三维曲线
类似plot,只不过多了个z参数。
x=sint
y=cost
z=t
t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
配合meshgrid绘制曲面
在mesh小节再解释为什么用meshgrid
x=-3:0.1:3;y=-3:0.1:3;
[X,Y]=meshgrid(x,y);
Z=sqrt(X.^2+Y.^2);
plot3(X,Y,Z)
如果不用meshgird,那么得到的只是一个不完整的截面
x=-3:0.1:3;y=-3:0.1:3;
Z=sqrt(X.^2+Y.^2);
plot3(X,Y,Z)
mesh
此命令要结合meshgrid来用,制作的是网格曲面
mesh(x,y,z)需要注意的是必须是同维数的矩阵。所以当用z=f(x,y),必须用点乘和点幂。
例如制作我们非常熟悉的马鞍面。
t=-10:0.2:10;
x=t;y=t;
[x1,y1]=meshgrid(x,y);
z=x1.^2-y1.^2;
mesh(x1,y1,z)
强行解释下meshgrid的作用,说白了其实就是对一个1xn维的向量变成一个nxn维的矩阵.
为什么要变成矩阵呢?理由很简单,毕竟xoy是一个平面,为了三维立体化,所以我们需要变成二维数组,也就是一个矩阵。
如果只是原来的x,y(1xn维数组),那么形成的只是线而不是一个平面。
话不多说,直接上图演示:
原始的t=x=y=[1 2 3 4],可以看出x,y由原来的1x4一维数组变成了4x4二维矩阵
surf
作用和mesh一样都是网格曲面,还是拿上面的例题来绘画。
这次在画图后面,咱们加一个命令去掉网格线,使其变得光滑好看些。
t=-10:0.2:10;
x=t;y=t;
[x1,y1]=meshgrid(x,y);
z=x1.^2-y1.^2;
surf(x1,y1,z)
shading flat
3.特殊图绘制
例如等高线、散点图、切片图
等高线
contour(Z,n)期中n为所绘制的图形等值线的条数。
咱们可以结合内置函数peaks一起使用
[x,y,z]=peaks;
contour(z,15)
那么问题来了peaks是什么?
MATLAB里的peaks是一个内置函数,用于处理图形数据1。具体来说,该函数可以生成一个30×30的guassian分布矩阵。更详细地,peaks函数的数学形式如下:
f(x,y) = 3 * (1 - x)^2 * exp(-x^2 - (y + 1)^2) - 10 * (x / 5 - x^3 - y^5) * exp(-x^2 - y^2) - 1/3 * exp(-(x + 1)^2 - y^2)
这个函数是由两个变量生成的,并且表示为多元函数。
接着上面的,也可以用
contour3(z,15)
来生成3维可视化图形
散点做图
scatter命令,5代表散点大小,你可以尝试下把5改成100会变成什么样。
x=-1:0.1:1;
y=x.^2;
scatter(x,y,5)
下面来展示三维的
t=-10:0.2:10;
x=t;y=t;
[x1,y1]=meshgrid(x,y);
z=-x1.^2-y1.^2;
scatter3(x1(:),y1(:),z(:),1)
切片图
切片函数:slice(X,Y,Z,V,xslice,yslice,zslice)
后面三个参数代表从哪个点开切,比如xslice=[-1 0 1]表示x从-1,0,1开切
t=-2:0.1:2;
x=t;y=t;z=t;
[x1,y1,z1]=meshgrid(x,y,z);
v=x1.^2+y1.^2+z1.^2;
slice(x1,y1,z1,v,[-1 0 1],[-1 0 1],[-1 0 1])
饼图
clear
data = [30, 20, 15, 10, 5];
explode=[0 1 0 1 0];%1代表数据拿出来,0则保持原位
labels={'30的占比','20的占比','15的占比','10的占比','5的占比'};
figure(1)
pie(data,explode)
figure(2)
pie(data,explode,labels)