%用cylinder函数分别绘制柱面、花瓶和圆锥面
clear
clc
%柱面
subplot(1,3,1);
[x,y,z] = cylinder;
surf(x,y,z);
%花瓶面
subplot(1,3,2);
t = linspace(0,2*pi,40);
[x,y,z]=cylinder(2+cos(t),30);
surf(x,y,z);
%圆锥面
subplot(1,3,3);
[x,y,z]=cylinder(0:0.2:2,30);
surf(x,y,z);
一、二维曲线
1、plot函数
(1)plot函数绘制二维折线( plot(x,y)包含两个向量 x,y )
>> x = [2.5,3.5,4,5]; >> y = [1.5,2.0,1,1.5]; >> plot(x,y) %运行结果如下
![]()
(2)最简单的plot函数调用格式( plot(x) 只包含一个向量x,此时二维图形横坐标为向量x的下标,纵坐标为向量内的值。 )
>> x = [2,1,3,0]; >> plot(x) %运行结果如下
(3)当plot函数的参数x是复数向量时,则分别以该向量元素实部和虚部为横、纵坐标绘制出一条曲线。
>> x = [2.5,3.5,4,5]; >> y = [1.5,2,1,1.5]; >> cx = x+y*i; %%%cx = complex(x,y) 与前面的命令相同 >> plot(cx) %执行图形如下
(4)plot(x,y)函数参数的变化形式
当x是向量,y是矩阵时
如果矩阵y的列数等于x的长度,则以向量x为横坐标,以y的每个行向量为纵坐标绘制曲线,曲线的条数等于y的行数。
如果矩阵γ的行数等于x的长度,则以向量x为横坐标,以y的每个列向量为纵坐标绘制曲线,曲线的条数等于y的列数。
当x、y是同型矩阵时
以x、y对应列元素为横、纵坐标分别绘制曲线曲线条数等于矩阵的列数。
>> x = [1,2;3,4]; >> y = [0,1;4,3]; >> plot(x,y) >> plot(x,y) >> x x = 1 2 3 4 >> y y = 0 1 4 3 %图形如下
例子:
% plot 中x为有一百个元素的向量,显然矩阵y的行数与x中元素个数相同,则绘制三条以x的元素为横坐标, % y的每一列元素为纵坐标的图形 >> x = linspace(0,2*pi,100); >> y = [sin(x);sin(2*x);sin(0.5*x)]; >> plot(x,y) % 利用转置,将行向量t转置为列向量t1,最后转为两个同型矩阵,画二维曲线图 >> t = 0:0.01:2*pi; >> t1 = t'; >> x = [t1,t1,t1]; >> y = [sin(t1),sin(2*t1),sin(0.5*t1)]; >> plot(x,y) %% 两段程序运行结果相同,如下
(5)含有多个输入参数的plot函数
plot(x1,y1,x2,y2,...,xn,yn)
其中,每一向量对构成一组数据点的横、纵坐标,绘制一条曲线。
>> t1 = linspace(0,2*pi,10); >> t2 = linspace(0,2*pi,20); >> t3 = linspace(0,2*pi,100); >> plot(t1,sin(t1),t2,sin(t2)+1,t3,sin(t3)+2)
(6)含选项的plot函数
plot(x,y,选项)
选项:可以有线性,颜色,数据点标记。
例4 用不同线型和颜色在同一坐标内绘制曲线y = 2
及其包络线
clear clc x = linspace(0,2*pi,1000); y = 2*exp(-0.5.*x).*sin(2*pi.*x); y1 = 2*exp(-0.5.*x); y2 = -2*exp(-0.5.*x); plot(x,y,"b",x,y1,":r",x,y2,":r");
运行结果如下:
clear clc x = linspace(0,2*pi,1000); y = 2*exp(-0.5.*x).*sin(2*pi.*x); y1 = 2*exp(-0.5.*x); y2 = -2*exp(-0.5.*x); x1 = 0:0.5:6; y3 = 2*exp(-0.5*x1).*sin(2*pi*x1); plot(x,y,"b",x,y1,"--r",x,y2,"--r",x1,y3,"rp");
2、fplot函数
fplot(f,lins,选项),用此函数绘图时,一般不使用数据点标记,如果采用数据点标记,会让图形变形。
其中,代表一个函数,通常采用函数句柄的形式。ims为x轴的取值范围,用二元向量[xmin,xmax]描述,默认值为[-5,5]。选项定义与plot函数相同。
(可根据参数函数的变化特性自适应地设置采样间隔)
clear clc f = @(x)sin(1./x); fplot(f,[0,0.2],'r');
绘制函数 sin(1/x) 的图像执行结果如下:
例,已知螺旋线的参数方程,绘制曲线。
x = t·sint
y = t·cost
clear clc t1 = @(t)t.*sin(t); t2 = @(t)t.*cos(t); fplot(t1,t2,[0,4*pi],'r');
二、绘制图形的辅助操纵
1、给图形添加标注
title (图形说明) :title(字符串),用于给图形添加标题
xlabel (x轴说明):
ylabel (y轴说明)
text (x,y,图形说明)
legend (图例1,图例2,...)
(1)title函数
x = linspace(-2*pi,2*pi,100); y = sin(x); plot(x,y,"b"); title({'y = sin(x)','MATLAB'}); %多行标题的命名格式
title函数,在图形标题中支持使用LaTeX格式控制符
title函数,可以设置图形标题的属性,格式如下:
title(图形标题,属性名,属性值)
Color属性:用于设置图形标题文本的颜色
FontSize属性:用于设置标题文字的字号
x = linspace(-2*pi,2*pi,100); y = sin(x); plot(x,y,"b"); title('Sin(x)','FontSize',24,'Color','r');
(2)xlabel函数和ylabel函数
调用格式同 title函数
(3)text函数和gtext函数
x = linspace(-2*pi,2*pi,100); y = sin(x); plot(x,y,"b"); title('Sin(x)','FontSize',24,'Color','r'); text(-2*pi,0,'-2{\pi}'); text(3,0.5,'\leftarrow sin(x)'); %%效果图如下
gtext(说明),没有坐标命令,执行命令时,说明会出现在鼠标点的位置。
(4)legend函数
legend(图例1,图例2,...)
x = linspace(0,2*pi,100); plot(x,[sin(x);sin(2*x);sin(3*x)]); legend('sin(x)','sin(2x)','sin(3x)');
2、坐标控制
(1) axis([xmin,xmax,ymin,ymax,zmin,zmax])——绘制三维图形时,给出六个参数。
axis equal : 纵、横坐标轴采用等长刻度。
axis square : 产生正方形坐标系(默认为矩形)
axis auto : 使用默认设置
axis off : 取消坐标轴
axis on : 显示坐标轴
% 为了得到封闭图形,曲线坐标首尾都定义为:(0,0)(0,0) % 有时,图形边框与原有边框重合,所以需要自定义坐标系刻度。 x = [0,1,1,0,0]; y = [0,0,1,1,0]; plot(x,y); axis([-0.1,1.1,-0.1,1.1]); axis equal; %横纵坐标轴采用等长刻度
(2)给坐标系添加网格和边框
grid on :显示网格线。
grid off :不显示网格线。
grid :用于在显示网格 和 不显示网格线之间进行切换。
box on :显示边框
box off : 不显示边框
box : 用于显示边框 和不显示边框之间切换
汇总,例子:
% 绘制sin(x),sin(2x),sin(x/2)的图形,并标注,显示图例,添加标题,x轴,y轴。 x = linspace(0,2*pi,100); y = [sin(2*x);sin(x);sin(0.5*x)]; plot(x,y); % box; axis([0,7,-1.2,1.2]); title('不同频率正弦函数的曲线'); xlabel('X轴');ylabel('Y轴'); text(1.5,sin(2*1.5),'sin(2x)'); text(3.5,sin(3.5),'sin(x)'); text(5.5,sin(5.5/2),'sin(x/2)'); grid; legend('sin(2x)','sin(x)','sin(x/2)'); % gtext('\leftarrow sin(2x)'); % gtext('\leftarrow sin(x)'); % gtext('\leftarrow sin(x/2)'); %% 图形显示如下:
3、图形保持
在Matlab中,每画一次图,都会把上一次画图的结果给覆盖。hold on,可以让上一次画图结果得以保存。
hold on : 保持
hold off : 关闭保持
hold : 两种模式切换
%画两个同心圆 %参数方程表示一个单位圆 t = linspace(0,2*pi,100); x = sin(t);y = cos(t); plot(x,y,'b'); hold on; plot(2*x,2*y,'r:'); axis([-3,3,-3,3]); axis equal; % 默认坐标系为长方形,圆的显示效果为椭圆,所以需要此命令。
4、图形窗口的分割
子图:同一图形窗口中的不同坐标系下的图形称为子图。
subplot函数:
subplot(m,n,p)
其中,m和n指定将图形窗口分为m×n个绘图区,p指定当前活动区。
%图形窗口的分割 s =@(x)sin(x); subplot(2,2,1); x = linspace(0,2*pi,100); y = s(x); plot(x,y); axis([-0.2,7,-1.2,1.2]); title('sin(x)'); c = @(x)cos(x); subplot(2,2,2); x = linspace(0,2*pi,100); y = c(x); plot(x,y); axis([0,2*pi,-1.2,1.2]); title('cos(x)'); s =@(x)log(x); subplot(2,2,3); x = linspace(0,5,100); y = s(x); plot(x,y); axis([-2,5,-5,5]); title('ln(x)'); grid; c = @(x)exp(x); subplot(2,2,4); x = linspace(-100,5,1000); y = c(x); plot(x,y,'b'); hold on; plot(0,1,'rp') axis([-5,5,0,5]); title('e^x'); grid;
%图形窗口的分割,更为细分 x = linspace(0,2*pi,60); subplot(2,2,1); plot(x,sin(x)-1); title('sin(x)-1');axis([0,2*pi,-2,0]); subplot(2,1,2); plot(x,cos(x)+1); title('cos(x)+1');axis([0,2*pi,0,2]); subplot(4,4,3) plot(x,tan(x)); title('tan(x)');axis([0,2*pi,-40,40]); subplot(4,4,8) plot(x,cot(x)); title('cot(x)');axis([0,2*pi,-35,35]);
三、其他形式的二维曲线
常用的坐标图
1、其他坐标系下的二维曲线图
semilogx(x1,y1,选项1,x2,y2,选项2,···):x轴采用常用对数坐标刻度,y轴采用一般线性刻度。
semilogy(x1,y1,选项1,x2,y2,选项2,···):x轴采用一般线性刻度,y轴采用常用对数坐标刻度。
loglog(x1,y1,选项1,x2,y2,选项2,···):x轴、y轴都采用常用的对数坐标刻度。
这些函数的调用方法与plot函数相同
%绘制1/x的直角坐标图 和 三种对数坐标图 x = 0:0.1:10; y = 1./x; subplot(2,2,1);plot(x,y);grid on; title('plot(x,y)'); subplot(2,2,2);semilogx(x,y);grid on; title('semilogx(x,y)'); subplot(2,2,3);semilogy(x,y);grid on; title('semilogy(x,y)'); subplot(2,2,4);loglog(x,y);grid on; title('loglog(x,y)');
极坐标图
polar(theta,rho,选项)
其中,the为极角,rho为极径,选项内容同plot函数。
%绘制心形曲线,按极坐标方程ρ = 1-sin(θ) t = 0:pi/100:2*pi; r = 1-sin(t); subplot(1,2,1); polar(t,r,'r'); subplot(1,2,2); t1 = t-pi/2; r1 = 1-sin(t1); polar(t,r1);
2、统计图
(1)条形图
bar 函数:绘制二维垂直条形图:bar(y,style)
barh 函数:绘制二维水平条形图:barh(y,style)
%绘制条形图 y = [1,2,3,4;1,4,4,1;4,3,2,1]; subplot(1,2,1); bar(y); %默认采用簇状分组 axis([0,4,0,5]); title('Group'); subplot(1,2,2) bar(y,'stacked'); %改为堆积分组 % axis([0,4,0,4]); title('Stack');
bar函数的其他用法,bar(x,y,style),其中,x存储横坐标,y存储数据。
x为向量,y为矩阵,y的行数必须与向量的长度相同。
% 家电销售例子 x = [2015,2016,2017]; y = [68,80,115,98,102;75,88,102,99,110;81,86,125,105,115]; bar(x,y)
(2)直方图
hist 函数,hist(y),通常y是向量,绘图时,会取y中元素的最大值和最小值,然后等分;看分布在每个区间元素的个数,作为纵坐标绘图。
hist(y,x),参数y是要统计的数据,x用于指定区间的划分。若x是标量,则统计区间划分为x个,若x是向量,则x作为每个区间的中心值。
%直方图 y = randn(500,1); %均值为0,方差为1 subplot(2,1,1); hist(y); title('高斯分布直方图'); subplot(2,1,2); x = -3:0.2:3; hist(y,x); title('指定区间中心点的直方图');
rose 函数 rose(theta,x) 绘制极坐标系下的直方图
其中,参数theta用于确定每一区间与原点的角度,选项x用于指定区间的划分方式。
若x是标量,则在0到2pi区间内,均匀划分成x个扇形区域,x缺省时按20个等分区间进行统计,每一区间的高度反应落入该区间的theta元素的个数,
(3)饼图(扇形统计图)
①扇形图 pie函数
pie函数 pie (x,explode):x存储待统计数据(通常x为向量),选项explode控制图块的显示模式。
例子,某次考试优秀、良好、中等、及格、不及格的人数分别为
5、17、23、9、4,试用扇形统计图作成绩统计分析。%某次考试成绩分布图 score = [5,17,23,9,4]; ex = [0,0,0,0,1]; pie(score,ex); legend('优秀','良好','中等','及格','不及格','location','eastoutside')
②面积图 area函数
(4)散点图
散点类图形经常用于实验中,比较实验得到的结果与理论值之间的差异。
scatter 函数:散点图
stair 函数:阶梯图
stem 函数:杆图
scatter 函数
scatter(x,y,选项,‘filled’)
参数x,y用于定位数据点,选项用法与plot函数相同。一般情况下,x、y是长度一样的向量。
例子,以散点图形式绘制桃心曲线:
%以散点图形式绘制桃心曲线 t = 0:pi/50:2*pi; x = 16*sin(t).^3; y = 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t); scatter(x,y,'rd','filled');
3、矢量图形
compass 函数:罗盘图
feather 函数:羽毛图
quiver 函数:箭头图
与plot用法相似,
quiver 函数调用格式:
quiver(x,y,u,v)
其中,(x,y)指定矢量起点,(u,v)指定矢量终点。
%已知向量A、B,求A+B,并用矢量图表示 A = [4,5];B = [-10,0]; C = A+B; hold on; quiver(0,0,A(1),A(2)); quiver(0,0,B(1),B(2)); quiver(0,0,C(1),C(2)); text(A(1),A(2),'A');text(B(1),B(2),'B');text(C(1),C(2),'C'); axis([-12,6,-1,6]); grid on;
四、三维曲线
(1)plot3 函数
plot3(x,y,z),参数x、y、z组成一组曲线的坐标。
%绘制一条折线,三维空间 x = [0.2,1.8,2.5,0]; y = [1.3,2.8,1.1,0]; z = [0.4,1.2,1.6,0]; plot3(x,y,z) grid on axis([0,3,0,3,0,2]);
%绘制螺旋线 t = linspace(0,10*pi,200); x = sin(t)+t.*cos(t); y = cos(t)-t.*sin(t); z = t; subplot(1,2,1); plot3(x,y,z); grid on; subplot(1,2,2); % 每隔四个元素取一个,共取得50元素,绘制的图像比较粗糙 plot3(x(1:4:200),y(1:4:200),z(1:4:200)); grid on;
(2)plot3函数的参数的变化形式
plot3(x,y,z)
参数x、y、z是同型矩阵。
参数x、y、z中有向量,也有矩阵。(此时应有,行向量的长度与矩阵的列数相同,列向量的长度与矩阵的行数相同。)
%在空间不同位置绘制5条正弦曲线 t = 0:0.01:2*pi; t = t'; x = [t,t,t,t,t]; y = [sin(t),sin(t)+1,sin(t)+2,sin(t)+3,sin(t)+4]; z = [t,t,t,t,t]; plot3(x,y,z); %代码输出结果,与上面相同 t = 0:0.01:2*pi; x = t; y = [sin(t);sin(t)+1;sin(t)+2;sin(t)+3;sin(t)+4]; z = t; plot3(x,y,z);
(3)含多组输入参数的plot3函数
plot3(x1,y1,z1,x2,y2,z2,...,xn,yn,zn)
每一组x、y、z向量构成一组数据点坐标,绘制一条曲线。
%绘制三条不同长度的正弦曲线 t1 = 0:0.01:1.5*pi; t2 = 0:0.01:2*pi; t3 = 0:0.01:3*pi; plot3(t1,sin(t1),t1,t2,sin(t2)+1,t2,t3,sin(t3)+2,t3);
(4)含选项的plot3函数
plot3(x,y,z,选项)
选项用于指定曲线的线性、颜色和数据点标记。
t = 0:0.1:6*pi; % t = linspace(0,6*pi,200); x = cos(t); y = sin(t); z = 2*t; plot3(x,y,z,'p'); xlabel('X'),ylabel('Y'),zlabel('Z'); grid on
fplot3函数
fplot3(funx,funy,funz,tlims)
其中,funx、funy、funz代表定义曲线x、y、z坐标的函数,通常采用函数句柄的形式。tlims为参数函数自变量的取值范围,用二元向量[tmin,tmax]描述,默认为[-5,5]
%绘制墨西哥帽顶曲线(参数t取值范围为:[-12,12]),曲线的参数方程如下: xt = @(t)exp(-t/10).*sin(5*t); yt = @(t)exp(-t/10).*cos(5*t); zt = @(t)t; fplot3(xt,yt,zt,[-12,12])
五、三维曲面
Matlab中绘制三维曲面图
1)平面网格数据的生成
2)绘制三维曲面的mesh函数和surf函数
3)如果曲面用含两个自变量的参数方程定义,可以用三维曲面mesha函数和surf函数
1、利用矩阵运算生成网格数据
%利用矩阵运算生成网格数据
x = 2:6;
y = (3:8)';
X = ones(size(y))*x;
Y = y*ones(size(x));
2、利用meshgrid函数生成网格数据
x = 2:6;
y = (3:8)';
[X,Y] = meshgrid(x,y);
%其中,参数x、y为向量,存储网格点坐标的X、Y为矩阵。
3、绘制三维曲线函数
mesh(x,y,z,c)
surf(x,y,z,c)
其中,x、y是网格坐标矩阵,z是网格点上的高度矩阵,一般情况下x、y、z为同型矩阵,c用于指定在不同高度下的曲面颜色。
clear clc %绘制三维曲面图z = x*exp(-x*x-y*y) t = -2:0.2:2; [X,Y] = meshgrid(t); Z = X.*exp(-X.^2-Y.^2); subplot(1,3,1); mesh(X,Y,Z); %三维网格图 title('one'); subplot(1,3,2); surf(X,Y,Z); %三维曲面图,颜色填充 subplot(1,3,3); plot3(X,Y,Z); grid on
mesh函数和surf函数的其他调用格式:
mesh(z,c)
surf(z,c)
当x、y省略时,z矩阵的第2维下标当作x轴坐标,z矩阵的第一维下标当作y轴坐标。
>> t = 1:5; z = [0.5*t;2*t;3*t]; mesh(z);
带等高线的三维网格曲面函数meshc
带底座的三维网格去曲面函数meshz
具有等高线的曲面函数surfc
具有光照效果的曲面函数surfl
%用四种方式绘制函数的曲面图 [x,y]=meshgrid(0:0.1:2,1:0.1:3); z = (x-1).^2+(y-2).^2-1; subplot(2,2,1); meshc(x,y,z);title('meshc(x,y,z)');%有等高线 subplot(2,2,2); meshz(x,y,z);title('meshz(x,y,z)');%有底座 subplot(2,2,3); surfc(x,y,z);title('surfc(x,y,z)');%有等高线 subplot(2,2,4); surfl(x,y,z);title('surfc(x,y,z)');%有光照
4、绘制标准三维曲面
(1)sphere函数,[x,y,z]=sphere(n),绘制三维球面
(2)cylinder函数,[x,y,z]=cylinder(R,n),绘制三维柱面
%用cylinder函数分别绘制柱面、花瓶和圆锥面 clear clc %柱面 subplot(1,3,1); [x,y,z] = cylinder; surf(x,y,z); %花瓶面 subplot(1,3,2); t = linspace(0,2*pi,40); [x,y,z]=cylinder(2+cos(t),30); surf(x,y,z); %圆锥面 subplot(1,3,3); [x,y,z]=cylinder(0:0.2:2,30); surf(x,y,z);
(3)peaks函数
多峰函数:
peaks函数的调用格式:
peaks(n)
peaks(V)
peaks(x,y)
peaks
(4) fsurf函数 和 fmesh函数
fsurf(funx,funy,funz,uvlims)
fmesh(funx,funy,funz,uvlims)
clear clc %绘制螺旋曲面 funx =@(u,v)u.*sin(v); funy =@(u,v)-u.*cos(v); funz =@(u,v)v; %下半段实心网格 fsurf(funx,funy,funz,[-5,5,-5,-2]) hold on %上半段空心网格 fmesh(funx,funy,funz,[-5,5,-2,2]) hold off
六、图形修饰处理
1、视点处理
(1)设置视点的函数,view函数的基本方法
view(az,el),az为方位角,与y轴负方向的夹角;el为仰角,与xy平面的夹角。
%绘制函数z = (x-1)^2+(y-2)^2-1曲面,并从不同视点展示曲面 clear clc %正常视角 subplot(2,2,1); t = linspace(-4,4,20); [X,Y] = meshgrid(t); Z = (X-1).^2+(Y-2).^2-1; mesh(X,Y,Z); %俯视视角 subplot(2,2,2); t = linspace(-4,4,20); [X,Y] = meshgrid(t); Z = (X-1).^2+(Y-2).^2-1; mesh(X,Y,Z); az = 0; el = 90; view(az,el); %侧面视角,y轴负方向 subplot(2,2,3); t = linspace(-4,4,20); [X,Y] = meshgrid(t); Z = (X-1).^2+(Y-2).^2-1; mesh(X,Y,Z); az = 0; el = 0; view(az,el); %45度方向 subplot(2,2,4); t = linspace(-4,4,20); [X,Y] = meshgrid(t); Z = (X-1).^2+(Y-2).^2-1; mesh(X,Y,Z); az = -45; el = 45; view(az,el);
(2)view函数的其他用法
view(x,y,z) 视点为笛卡尔坐标的位置
view(2) 视点从二维平面观察图形,即:方位角为0度,仰角为90度。
view(3) 视点从三维空间观察图形,即:从默认方向观察图形。
2、色彩处理
色图(Colormap)
colormap jet
colormap hot
colormap summer
colormap cool
等等
创建一个色图矩阵
clear clc %创建一个色图 c = [0:0.01:1]'; c1 = [0:0.005:0.5]'; c2 = [0:0.01:1]'; cmap = [c,c1,c2]; surf(peaks); colormap(cmap);
(3)三维图形表面的着色
shading facted 将每个网格片用其高度对应的颜色进行着色
shading flat 将每个网格片用同一个颜色进行着色,且网格线也用相应的颜色
shading interp 在网格片内采用颜色插值处理
%使用同意色图,以不同着色方式绘制圆锥体
[x,y,z] = cylinder(pi:-pi/5:0,10);
colormap(lines);
subplot(1,3,1);
surf(x,y,z);shading flat
subplot(1,3,2);
surf(x,y,z);shading interp
subplot(1,3,3);
surf(x,y,z);
3、剪裁处理
NaN常数,可以用来表现那些不可用来使用的函数。
利用这种特性,可以将图形中需要裁剪部分对应的函数值设置成NaN,此时,绘制图形,函数值为NaN的部分将不显示出来,从而达到对图形进行剪裁的目的。
绘制3/4圆
clear clc %绘制3/4圆 t = linspace(0,2*pi,100); x = sin(t); y = cos(t); plot(x,y); p = y >0.5; y(p) =NaN; plot(x,y); axis([-1.1,1.1,-1.1,1.1]); axis square grid on
绘制3/4球面
%绘制3/4球面 [X,Y,Z] = sphere(60); p = Z>0.5; Z(p) = NaN; surf(X,Y,Z); axis([-1,1,-1,1,-1,1]); axis equal; view(-45,20);
七、交互式绘图工具
1、“绘图”选项卡
2、图形窗口绘图工具
3、图形窗口菜单和工具栏
这块多试试就知道了