图形绘制基本流程
1.准备绘图数据
2.创建绘图窗口
3.调用绘图函数
4.设置样式与标记属性
5.设置坐标范围与网格属性
6.设置色表
7.设置光照效果
8.设置视角
9.给图形添加标注
10.到出或保存图形
基本流程详解
准备绘图数据
常见有函数、矩阵等
例:
y=sin(x)+2*cos(x);
创建图形窗口
figure;
一般在脚本文件中不用写此句,调用绘图函数会自动创建
需要注意的是,在修改程序后下一次执行程序前注意执行 close all 否则默认在现有窗口中继续绘图
窗口命令
调用绘图函数
二维
二维曲线
plot() 二维曲线
plot(X,Y,LineSpec)
设置线型、标记符号和颜色。
linespec默认值
linespec非必需值,不填写默认实线,无标记
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
设置linespec并绘制多个函数
可一个函数在单个图中绘制多个
x = 0:pi/10:2*pi;
y1 = sin(x);
y2 = sin(x-0.25);
y3 = sin(x-0.5);
figure
plot(x,y1,'g',x,y2,'b--o',x,y3,'c*')
创建矩阵线图
Y = magic(4) %幻方矩阵
figure
plot(Y)
创建 Y 的二维线图。MATLAB将矩阵的每一列绘制为单独的线条。
line() 二维曲线
line(x,y,‘name’,‘value’)
等高线图——平面
contour()
把曲面的等高线投影在X-Y平面
close all
[x,y,z]=peaks;
contour(x,y,z,15);
colorbar;
添加高度标签
[c,h]=contour(…)
返回等高线矩阵c,和等高线对象的句柄h,c中 包含每个层级的顶点的 (x, y) 坐标。
[x,y,z]=peaks;
[c,h]=contour(z);
clabel(c,h);
填充二维等高线图
contourf()
[x,y,z]=peaks;
contourf(z,15);
hold 多图绘制
hold on %开启叠加模式
hold off %关闭叠加模式
示例
x = 0:0.1*pi:2*pi;
y = sin(x);
plot(x,y);
% 设置为叠加绘图模式 hold on
z = cos(x);
% 绘制第二条曲线,颜色为红色
plot(x,z, ‘r’);
% 关闭叠加模式
hold off
subplot()子图绘制
subplot函数的一般语法形式为: subplot(m, n, p) 5.2.6 子图绘制 执行该语句,即可在当前绘图区中创建m×n个绘图子区, 并将第p个绘图子区选定为当前绘图区。
x = 1:1:10;
y = rand(1, 10); % 随机生成包含10个元素数组y
z = rand(1, 10); % 随机生成包含10个元素数组z
subplot(2, 1, 1); % 选择2行1列子图中第1个子图
plot(x, y);
title('subfigure 1');
subplot(2, 1, 2); % 选择2行1列子图中第2个子图
plot(x, z);
title('subfigure 2');
特殊图形绘制
绘制柱状图
bar(x,y,‘style ’)
barh() 是bar()的横向
style
’grouped’
为 y 中的每一行显示一组。
如果 y 是一个 m×n 矩阵,bar 显示 m 组 n 个垂直条,其中,m 是 y 的行数,n 是列数。
如果 y 是长度为 n 的向量,bar 会显示由 n 个条形构成的一个条形组。bar 函数将所有向量当作列向量处理。
‘stacked’
为 y 中的每一行显示一个条形。
如果 y 是一个 m×n 矩阵,bar 显示 m 个条形,其中每个条形高度是行中元素总和。每个条形标记有多种颜色。不同颜色分别对应不同的元素,显示每行元素占总和的相对量。
如果 y 是长度为 n 的向量,则 bar 会显示 n 个条形。bar 函数将所有向量当作列向量处理。
y = [2 2 3; 2 5 6; 2 8 9; 2 11 12];
bar(y)
绘制面积图
area(x,y)
X = [1;2;3;4;5];
Y = [5 1 2;8 3 7; 9 6 8; 5 5 5; 4 2 3];
area(X,Y)
绘制饼图
pie(x,y)
X = [1;2;3;4;5];
pie(X)
绘制直方图
直方图统计每个区间内数据点的个数,并用柱状条表 示数据的分布情况。
直坐标
hist()
x = [0 2 9 2 5 8 7 3 1 9 4 3 5 8 10 0 1 2 9 5 10];
hist(x)
极坐标
rose()
x = [0 2 9 2 5 8 7 3 1 9 4 3 5 8 10 0 1 2 9 5 10];
rose(x)
对数坐标曲线
semilogx:半对数x坐标绘图
semilogy:半对数y坐标绘图
loglog:双对数X-Y坐标绘图
具体用法和plot相同。
x=0:0.1:2*pi;
y=sin(x);
semilogx(x,y);
grid on;
极坐标曲线
polar(theta,rho,选项)
theta,rho分别为极角和矢径。 选项的用法和plot用法相同。
theta=0:0.1:4*pi;
rho=cos(theta/8)+1/3;
polar(theta,rho,'m-');
双y轴图形
plotyy(x1,y1,x2,y2,fun);
x=0:0.01:5;
y1=x;
y2=exp(x);
plot(x,y1,x,y2);
figure
plotyy(x,y1,x,y2);
绘制二维图形的其他函数
stem(x,y,选项)-----绘脉冲图
stairs(x,y,选项)-----绘阶梯图
fill(x1,y1,c1,x2,y2,c2,…)---用标注的颜色填 充2维多边形
t=0:0.5:4*pi;
y=exp(-0.1*t).*sin(t);
subplot (2,2,1), stem(t,y);
title('stem(t,y)')
subplot (2,2,2), stairs(t,y);
title('stairs(t,y)')
subplot (2,2,3), bar(t,y);
title('bar(t,y)')
subplot (2,2,4), fill(t,y,'r');
title(' fill(t,y,''r'')')
三维
plot3() 三维曲线
plot3(X1, Y1, Z1,LineSpec,…)
X1、Y1和Z1:三个方向上的坐标值,尺寸相同 LineSpec:对曲线的线型、颜色、线宽、点标记样 式等属性进行设置。
t = 0 : pi/20 : 10*pi;
plot3(2*t, sin(t), t)
grid on; box on
三维曲面
平面网格
[X, Y] = meshgrid(x,y)
借助surf()绘制
x、y:指定横坐标和纵坐标的一维向量;
X、Y:meshgrid函数的返回值,它们都是二维数组,X的每一行与向量x对应,Y的每一列与y对应。
x = 1:4;
y = 6:10;
[X, Y] = meshgrid(x,y)
surf(X,Y)
X =
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
Y =
6 6 6 6
7 7 7 7
8 8 8 8
9 9 9 9
10 10 10 10
在二维网格计算并绘制函数
x = 1:4;
y = 6:10;
[X, Y] = meshgrid(x,y)
Z = X.^2 + Y.^2 ;
surf(X,Y,Z)
绘制三维网眼图
mesh函数用于三维网眼图的绘制,语法为:
mesh(X, Y, Z)
X、Y:网格矩阵数组,一般是通过meshgrid函 数生成的二维数组;
Z:函数值数组,通过函数Z=f(X,Y)计算得到
mesh(c/z)
meshc:在绘制网眼图的同时,在(x,y)平面上 绘制函数的等值线
meshz:在网眼图的基础上在图形的底部外侧绘 制平行与z轴的边框线(基准平面)。
x = -2:0.2:2;
y = x;
[X, Y] = meshgrid(x,y);
Z = X.^2 + Y.^2;
subplot(1,2,1);
mesh(X,Y,Z)
title('mesh网眼图')
subplot(1,2,2);
meshc(X,Y,Z)
title('meshc网眼图')
绘制三维表面图
surf函数用于三维表面图的绘制,语法为:
surf(X, Y, Z) surfc(X,Y,Z)
X、Y:网格矩阵数组,一般是通过meshgrid函数生成的二维数组;
Z:函数值数组,通过函数z=f(x,y)计算得到。
surf(c)
surfc在surf的基础上绘制等值线
x = -2:0.2:2; y = x;
[X, Y] = meshgrid(x,y);
Z = -3*X + 2*Y;
subplot(1,2,1);
surf(X,Y,Z);
title('surf表面图')
Z2 = X.^2 + Y.^2;
subplot(1,2,2);
surfc(X,Y,Z2);
title('surfc表面图')
mash与surf的比较
标准三维曲面
[x,y,z]=sphere(n)
产生(n+1)×(n+1)的矩阵x,y,z,利用这三个矩阵可绘制圆心位于原点,半径为1的单位球体。
借助surf()绘制
[x,y,z] = sphere;
%绘制以原点为中心的球面。绘制两个以 (3,-2,0) 和 (0,1,-3) 为中心的球面。
figure
surf(x,y,z)
[x,y,z]= cylinder(R,n)
R是一个向量,存放柱面各个等间隔高度上的半径
借助surf()绘制,也可以不使用,不添加返回值即可
subplot(2,2,1);[X,Y,Z]=cylinder(10);
surf(X,Y,Z)
subplot(2,2,2);cylinder([10,1]);
subplot(2,2,3);cylinder; t=0:pi/100:4*pi;
R=sin(t); subplot(2,2,4);cylinder(R,35);
等高线图——立体
contour3:在三维立体图中画出等高线
close all
[x,y,z]=peaks;
contour3(x,y,z,15);
colorbar;
三维柱状图
bar3()
与bar()类似
x = [1;2;3;4;5];
Y = [5 1 2;8 3 7;9 6 8;5 5 5;4 2 3];
subplot(1,2,1);
%绘制纵向组三维柱状图
bar3(Y)
title('纵向-组柱状图')
subplot(1,2,2);
% 绘制纵向层叠三维柱状图
bar3(x,Y,'stack')
title('纵向层叠三维柱状图')
三维饼图
pie3()
与pie()类似
X = [0.4665 0.4981 0.4874 0.2295 0.0856 0.0674]
pie3(X); title('三维饼图')
三维直方图
hit3()
与hit()类似
X = [rand(1,1000)*10; rand(1,1000)*5];
X = X';
hist3(X,[10,10]);
title('三维直方图')
设置样式与标记属性
plot(linespec)
使用linespec快速设置样式,在 调用绘图函数 中有讲解
set()
set(H,Name,Value)
其中H为图形句柄
例:H=plot(x,y)
设置线条颜色
示例
p = plot(1:10);
set(p,'Color','red')
设置线型
示例
p = plot(1:10);
set(p,'LineStyle','-.');
设置线宽
set(h, 'LineWidth', 2)% 设置线宽
设置标记符号
示例
p = plot(1:10);
set(p,'Marker','*');
设计标记点颜色
set(h, 'MarkerEdgeColor','b'); % 设置标记点边框颜色
set(h, 'MarkerFaceColor','r'); % 设置标记点填充颜色
设置坐标范围与网格属性
axis()
axis ij
矩阵模式 i为竖轴 下至上 j为横轴 左至右
x = 0:0.1*pi:2*pi;
y = sin(x);
plot(x,y);
% 重新设置坐标轴范围
axis([0.2*pi 1.8*pi -1.5 1.5])
% 将坐标轴设置为矩阵模式
axis ij
axis xy
笛卡尔模式 x为横轴 左至右 y为纵轴下至上
x = 0:0.1*pi:2*pi;
y = sin(x);
plot(x,y);
% 重新设置坐标轴范围
axis([0.2*pi 1.8*pi -1.5 1.5])
% 将坐标轴设置为矩阵模式
axis xy
设置坐标轴范围和纵横比
x = linspace(0,2*pi);
y = sin(x);
plot(x,y,'-o')
axis([0 2*pi -1.5 1.5])
前两组设置横轴范围,后两组设置纵轴范围
半自动设置
自动设置纵轴最大值
x = linspace(-10,10,200);
y = sin(4*x)./exp(.1*x);
plot(x,y)
axis([-10 10 0 inf])
自动设置
axis auto
冻结范围
axis manual
设置为数据范围
axis tight
显示或隐藏坐标轴(常用在3d)
axis on
axis off
grid
显示或隐藏坐标区网格线
grid on
grid off
设置色表
colormap < name >
设置光照效果
shading flat:将图形对象(线条、表面区域 等)显示为单色;
shading faceted:将图形对象显示为单色,将 线条对象显示为黑色;(默认)
shading interp:将图形对象显示为颜色过渡 模式。
设置视角
view(az, el) view([az, el])
[az, el] = view az:视角的方位角 el:视角的仰角。
[az, el] = view返回当期 视角的方位角和仰角
给图形添加标注
title()设置标题
title ('the first figure ');
xlabel()横坐标标签
xlabel ('横坐标');
ylable()纵坐标标签
ylabel ('纵坐标');
legend()设置图例
legend('tan(sin(x)) - sin(tan(x))');
colorbar设置颜色条
annotation添加文本、线条、箭头、图框
导出或保存图形
print()
print(gcf,'my_first_figure.jpg','-djpeg')