赞
踩
用图表和图形展现数据的技术被称为 数据图形可视化. 在本文中, 我们将简介MATLAB数据图形绘制机能. MATLAB 提供了丰富的绘图函数和绘图工具, 这些函数或工具的输出均显示在 MATLAB 命令窗口外的图形窗口中.
在 MATLAB 中, 我们可使用函数 Figure
建立图形窗口.
在 MATLAB 控制台中输入 Figure(int)
, 即可得到名为整数 int
的图形框. 图形框名默认为
1.
1.
1.
我们可以使用"图形编辑工具条"对图形进行编辑和修改, 亦可使用光标右键菜单栏对图形实行操作.
使用 close
指令可以关闭图形窗口. 其调用方式:
close %关闭当前图形窗口.
close(x) %关闭指定的图形窗口.
close name %关闭指定名称的图形窗口.
close all %保留隐藏图形窗口, 关闭其余所有图形窗口.
close all hidden %关闭所有图形窗口.
status = close(...) %返回调用close函数关闭图形窗口的状态.
%% 清除当前图形窗口内容可用的命令:
clf %清除当前窗口所有可见图形对象
clf reset %清除当前窗口所有可见图形对象, 并设置窗口属性值为默认.
利用MATLAB的某些内置绘图函数可以轻松实现函数可视化.
使用函数 ezplot
绘制任意的一元函数:
1. ezplot(f)
2. ezplot(f,[min,max])
3. ezplot(x,y)
4. ezplot(f,[xmin,xmax,ymin,ymax])
5. ezplot(x,y,[tmin,tmax])
- 按 x x x 的默认取值范围绘制函数图形.
- 按照 x x x 指定的取值范围绘制函数图形.
- 按默认取值范围绘制 x = x ( t ) , y = y ( t ) x = x(t), y = y(t) x=x(t),y=y(t).函数图形.
- 按照指定的, x , y x,y x,y 的取值范围绘制 x = x ( t ) , y = y ( t ) x = x(t), y = y(t) x=x(t),y=y(t).函数图形.
- 按照 t t t 的取值范围绘制 x = x ( t ) , y = y ( t ) x = x(t), y = y(t) x=x(t),y=y(t).函数图形.
[例]
绘制蔓叶线图形:
y
2
(
3
+
x
)
−
(
3
−
x
)
3
y^{2}(3+x)-(3-x)^{3}
y2(3+x)−(3−x)3
[解]
>> f = '(y.^2)*(3 + x) - (3 - x).^3';
>> ezplot(f)
代码执行结果如下:
[例]
绘制 Archimede 螺线 (设 a = 3 a = 3 a=3) :
[解]
>> syms x y t;
>> x = 3.*(cos(t) + t.*sin(t));
>> y = 3.*(sin(t) - t.*cos(t));
>> ezplot(x,y,[0,810])
>>
代码执行结果如下:
对于二元函数
z
=
f
(
x
,
y
)
,
z = f(x,y),
z=f(x,y), 同样可使用符号函数提供的函数 ezmesh
绘制各类图形, 也可以使用 meshgrid
函数获得矩阵
z
z
z, 或用循环语句计算矩阵
z
z
z 的元素.
ezmesh
1. ezmesh(f)
2. ezmesh(f,domain)
3. ezmesh(x,y,z)
4. ezmesh(x,y,z,[smin,smax,tmin,tmax])
5. ezmesh(... ,n)
6. ezmesh(...,'circ')
- 按照 x , y x,y x,y 默认取值范围绘制二元函数 f f f 的图形.
- 按照
domain
指定的取值范围绘制二元函数 f f f 的图形.- 按照 参数 s , t s,t s,t 的默认取值范围绘制函数 x = x ( s , t ) , y = y ( s , t ) , z = z ( s , t ) x = x(s,t), y = y(s,t),z = z(s,t) x=x(s,t),y=y(s,t),z=z(s,t) 的图形.
- 按照指定的取值范围[smin,smax,tmin,tmax] 绘制函数 f ( x , y ) f(x,y) f(x,y) 的图形.
5.调用ezmesh
绘制图形时, 同时绘制 n ∗ n n*n n∗n 的网格,默认 n = 60. n = 60. n=60.- 调用
ezmesh
绘制图形时, 以指定区域的中心绘制图形.
[例]
绘制函数
z
=
(
1
−
x
2
−
y
)
.
z = \sqrt{(1-x^{2}-y)}.
z=(1−x2−y)
.
[解]
syms x y;
f = 'sqrt(1-x.^2-y)';
ezmesh(f,20)
代码执行如下:
meshgrid
meshgrid
函数即可方便地获取所有
z
z
z 的数据. 随后,我们调用 surf
函数即可绘制出二元函数的图形.[例]
绘制函数
z
=
(
x
2
−
1.5
x
)
e
−
x
2
−
y
2
−
x
y
.
z = (x^{2}-1.5x)e^{-x^{2}-y^{2}-x^{y}}.
z=(x2−1.5x)e−x2−y2−xy.
[解]
[x,y]=meshgrid(-3:0.1:3,-2:0.1:2);
z=(x.^2-1.5*x).*exp(-x.^2-y.^2-x.*y);
mesh(x,y,z);
subplot(2,2,1);
surf(x,y,z);
view(0,90);
subplot(2,2,2);
surf(x,y,z);
view(90,0);
subplot(2,2,3);
surf(x,y,z);
view(0,0);
subplot(2,2,4);
surf(x,y,z);
代码执行结果如下:
此外, 在某些特殊情况下,我们也可以使用循环语句获取原本只需要使用 meshgrid
函数即可获得的矩阵数据.
利用数据可视化方法, 我们可以通过图形这一展示方式, 从杂乱的离散数据中观察数据间的内在关联.
任何二元实数标量对 ( x a , y a ) (x_{a},y_{a}) (xa,ya) 可在一个平面上表示一个点, 任何二元实数向量对 ( X , Y ) (X,Y) (X,Y) 可在平面上表示一组点.
对于离散实函数 y n = f ( x n ) y_{n} = f(x_{n}) yn=f(xn), 当 X = [ x 1 , x 2 , ⋯ , x n ] X = [x_{1},x_{2},\cdots, x_{n}] X=[x1,x2,⋯,xn] 以递增或递减的次序取值时, 有 Y = [ y 1 , y 2 , ⋯ , y n ] Y = [y_{1},y_{2},\cdots,y_{n}] Y=[y1,y2,⋯,yn]. 将该向量对用直角坐标序列点展示时, 即实现了离散数据的可视化.
当处理离散量时, 我们可以使用 离散序列图 来表示离散量的变化情况. 在 MATLAB 中, 我们使用 stem
实现离散图形的绘制:
stem(y)
以 x = 1 , 2 , 3 , ⋯ x = 1,2,3,\cdots x=1,2,3,⋯ 作为每个数据点的 x x x 轴的坐标, 以向量 y y y 的值作为纵坐标. 在 ( x , y ) (x,y) (x,y) 坐标点处绘制一个空心圆, 并连接一条线段至 X X X 轴.
[例]
绘制一个离散序列图:
figure
t = linspace(-11.4,51.4,8);
h = stem(t);
set(h(1),'MarkerFaceColor','blue')
set(h(2),'MarkerFaceClolr','red','Marker','square')
图形输出如下:
stem(x,y,'option')
以
x
x
x 的各个元素为横坐标, 以
y
y
y 的各个元素为纵坐标, 在
(
x
,
y
)
(x,y)
(x,y) 坐标点绘制一个空心圆, 并连接一条线段至
X
X
X 轴. 可通过 options
选项控制绘图时的线型和颜色等设置.
stem(x,y,'filled')
以 x x x 的各个元素为横坐标, 以 y y y 的各个元素为纵坐标, 在 ( x , y ) (x,y) (x,y) 坐标点绘制一个实心圆, 并连接一条线段至 X X X 轴.
[例]
用 stem
函数绘制一个线型为圆圈的离散序列图:
figure
x = 0:20;
y = [exp(-0.05*x).*cos(x);exp(0.06*x).*cos(x)]';
h = stem(x,y);
set(h(1),'MarkerFaceColor','blue')
set(h(2),'MarkerFaceColor','red','Marker','square')
输出图形如下;
注:除了使用 stem
命令外, 我们也可以直接使用离散数据绘制离散图形.
[例]
用图形表示离散函数:
y
=
1
∣
n
−
6
∣
,
n
=
1
,
2
,
⋯
,
10.
y = \frac{1}{|n-6|}, \ \ \ n = 1,2,\cdots, 10.
y=∣n−6∣1, n=1,2,⋯,10.
[解]
n = 0:10 %产生一组十个自变量
y = 1./abs(n-6); %计算对应的函数值
plot(n,y,'r*','MarkerSize',25)
%使用尺寸为25的红色星号标记函数点
grid on %绘制坐标方格
输出图形如下:
我们可以对连续函数取一组离散自变量, 并计算函数值, 再用相同方法显示.
MATLAB在简易二维画图中会标出相应的离散数据点, 并且将这些点直接相连. 点越多, 绘制的曲线越平滑.
[例]
用图形表示连续调制波形
y
=
s
i
n
(
t
)
s
i
n
(
9
t
)
.
y = sin(t)sin(9t).
y=sin(t)sin(9t).
[解]
t1 = (0:12)/12 *pi; %自变量取12+1 = 13个点 y1 = sin(t1).*sin(9*t1); %计算函数值 t2 = (0:50)/50 *pi; %自变量取51个点 y2 = sin(t2).*sin(9*t2); subplot(2,2,1); %在子图1上绘制 plot(t1,y1,'r.'); %设定数据点颜色为红色 axis([0,pi,-1,1]); %定义坐标大小 title('SubPlot 1'); %定义子图标题 %子图2数据点为红色 subplot(2,2,2); plot(t2,y2,'r.'); axis([0,pi,-1,1]); title('SubPlot 2'); %子图3用直线连接红色的数据点 subplot(2,2,3); plot(t1,y1,t1,y1,'r.') axis([0,pi,-1,1]); title('SubPlot 3'); %子图4用直线连接数据点 subplot(2,2,4); plot(t2,y2) axis([0,pi,-1,1]); title('SubPlot 4');
输出图形如下:
本节将简介二维绘图中的常用函数及其用法.
准备数据
选择需要展现的数据范围, 产生自变量采样向量. 计算相应的函数值并生成函数值向量. 若需要绘制二维曲线, 则需要准备横纵坐标数据. 若要绘制三维曲面, 则需要准备矩阵参变量和对应的
z
z
z 轴坐标.
指定图形窗口和子图位置
我们使用 figure
命令指定图形窗口. 该函数默认将打开 Figure1
或当前已经打开的窗口或子图. 我们还可以使用 subplot
指定当前子图.
绘制图形
根据数据绘制曲线后, 设置曲线的绘制参数, 包括线型, 颜色, 数据点形状等.
设置坐标轴和图形注释
设置坐标的范围, 刻度和坐标分割线等, 并设定包括图名, 坐标名, 图例, 文字说明等的图形注释.
格式:
title('图名') %指定图名
xlabel('x轴名') %指定x轴名
ylabel('y轴名') %指定y轴名
legend('指定图例') %图例
text(2,0.5,'函数') %指定文字
axis([xmin,xmax,ymin,ymax]) %设置坐标轴范围
grid on %绘制坐标分割线
精细修饰图形
我们可以利用对象或图形窗口的菜单和工具栏进行设置, 属性设定则需要使用图形句柄进行操作.
按指定格式保存或导出图形
将绘制的图形保存为指定格式的文件.
二维图形绘图命令 plot
调用格式如下:
1. plot(X,'s')
2. plot(X,Y,'s')
3. plot(X1,Y1,'s1',X2,Y2,'s2',...)
- X X X 是实向量时, 以向量元素的下标为其横坐标, 元素值为纵坐标绘制一连续曲线. X X X为实矩阵时, 按列绘制每列元素值对应其下标的曲线, 曲线数目等于 X X X 矩阵的列数. X X X 是复数矩阵时, 按列分别以元素实部和虚部为横, 纵坐标绘制多条曲线.
- X , Y X, Y X,Y 为同维向量时, 绘制以 X , Y X,Y X,Y 元素为横, 纵坐标的曲线. X X X 为向量, Y Y Y 是有一维和 X X X 等维的矩阵时, 则绘出多根不同颜色的曲线. 曲线数等于 Y Y Y 的另一维数, X X X 作为这些曲线的共同坐标. X X X 为矩阵, Y Y Y 为向量时, 情况同上, Y Y Y 作为共同坐标. X , Y X,Y X,Y 是同维矩阵时, 以 X , Y X,Y X,Y 对应的元素为横, 纵坐标分别绘制曲线, 曲线数目等于矩阵的列数.
s1
,s2
是用于指定线型, 颜色, 数据点形的字符串.
[例]
绘制连续调制波形及其包络线.
[解]
t = (0:pi/100:4*pi)'; %生成长度为101的时间采样序列
y1 = sin(t)*[1,-1]; %包络线的函数值:一个101*2矩阵
y2 = sin(t).*sin(9*t); %生成一个长101的调制波列向量
t3 = pi*(0:9)/9;
y3 = sin(t3).*sin(9*t3);
plot(t,y1,'r:',t,y2,'b',t3,y3,'b*') %绘制三组曲线
axis([0,2*pi,-1,1]) %控制数轴范围
输出图形如下:
[例]
采用模型:
x
2
a
2
+
y
2
25
−
a
2
=
1
\frac{x^{2}}{a^{2}} + \frac{y^{2}}{25-a^{2}} = 1
a2x2+25−a2y2=1
绘制一组椭圆.
[解]
th = [0:pi/50:2*pi]';
a = [0.5:.5:4.5];
X = cos(th)*a;
Y = sin(th)*sqrt(25 - a.^2);
plot(X,Y)
axis = ('equal')
xlabel('x')
ylabel('y')
title('A Set Of Eclipses')
输出图形如下:
MATLAB中的快速方程式绘图函数包括 fplot
和 ezplot
.
fplot
该函数功能为单纯地绘制方程式图形, 图形的
(
x
,
y
)
(x,y)
(x,y) 坐标值会由函数自行获取, 但是需要输入
x
x
x 坐标的范围. 调用语法如下:
fplot('函数',[xmin,xmax])
ezplot
该函数功能类似于 fplot
, 但可以绘出显函数, 隐函数和参数式. 调用格式如下:
1. ezplot('函数方程',[xmin,xmax,ymin,ymax])
2. ezplot('x参数式','y参数式',[tmin,tmax])
[例]
使用 ezplot
函数绘制参数式:
x
=
c
o
s
(
5
t
)
,
y
=
s
i
n
(
3
t
)
,
t
∈
[
0
,
2
π
]
.
x = cos(5t), \ \ \ y = sin(3t), \ \ \ t \in [0,2\pi].
x=cos(5t), y=sin(3t), t∈[0,2π].
[解]
ezplot('cos(5*t)','sin(3*t)',[0,2*pi])
输出图形如下:
在使用基本绘图函数时,它们所输出的图形坐标轴刻度均为线性刻度. 然而, 当实际问题的数据出现指数变化时, 就无法直观地使用基本绘图函数表现数据的指数变化. 为解决这个问题, 我们需要使用 MATLAB 所提供的多种特殊的绘图函数.
i. 特殊坐标图形的绘制
此处的"特殊坐标"是指非 Descartes 坐标系, 具体包括极坐标系, 对数坐标系. 柱坐标系和球坐标系.
polar
函数可用于描绘极坐标图象. 其调用格式为:
polar(theta,rho,LineSpec)
其中, theta
为极角, rho
为极轴, LineSpec
为控制图中线型, 符号和颜色的绘图格式控制参量.
[例]
绘制心型曲线:
a = -2*pi:.001:2*pi; b = (1-sin(a)); polar(a,b,'r')
输出图形如下:
MATLAB 提供了绘制不同形式的对数坐标曲线的功能. 具体实现的函数有:
semilogx
, semilogx(y)
, semilogy
.
semilogx
, semilogy
x x x ( y y y) 轴对数坐标图. 即:使用该函数绘制图形时 x x x ( y y y) 轴将使用对数坐标.
semilogx(y)
若
y
y
y 为实数向量或矩阵, 则 semilogx(y)
结合
y
y
y 列向量的下标和
y
y
y 的列向量绘制出线条. 若
y
y
y 为复向量或复矩阵, 则 semilogx(y)
此时等价于 semilogx(real(y).image(y))
.
[例]
y = [1+1*i, 4+5*i, 1+4*i, 8+1*i, 0+3*i, 6+4*i];
semilogx(y)
输出图形如下:
在 MATLAB 中没有在柱坐标和球坐标下直接绘制图形的命令, 但我们仍可以使用 pol2cart
, sph2cart
命令将待绘制的柱坐标或球坐标值转换为直角坐标下的坐标值, 并在直角坐标下绘制数据图形.
pol2cart
命令调用格式如下:
[x,y] = pol2cart(theta,rho,)
[x,y,z] = pol2cart(theta,rho,z)
sph2cart
命令调用格式如下:
[x,y,z] = sph2cart(theta,phi,r)
[例]
在直角坐标系下绘制柱坐标数据的图形:
theta = 0:pi/20:2*pi;
rho = sin(theta);
[t,r] = meshgrid(theta,rho);
z = r.* t;
[X,Y,Z] = pol2cart(t,r,z);
mesh(X,Y,Z)
输出图形如下:
在 MATLAB 中, 还有其余可用来绘制不同类型的二维图形的绘图函数.:
1. bar(横坐标,纵坐标) %绘制条形图
2. fplot(某个函数,[精确绘图范围]) %精确绘图
3. polar(极角,函数) %绘制极坐标图像
4. stairs(横坐标,纵坐标) %绘制阶梯图
5. line([x1,y1],[x2,y2],...) %绘制折线图
6. fill(横坐标,纵坐标,点的颜色) %绘制实心图
7. scatter(横坐标,纵坐标,面积,颜色) %绘制散点图
8. pie(x) %绘制饼图
9. contour(x) %绘制等高线
[例]使用函数绘制一个针状图:
x = 0:0.05:3;
y = (x.^0.4).*exp(-x);
stem(x,y)
输出图形如下:
[例]使用函数绘制阶梯图:
x = 0:0.5:10;
stairs(x,sin(2*x)+sin(x));
输出图形如下:
[例]使用函数绘制饼图:
x = [13,28,23,44,21];
pie(x)
输出图形如下:
割开饼图中的紫色扇形块:
x = [13,28,23,44,21];
y = [1,0,0,0,0];
pie(x,y)
输出图形如下:
[例]绘制二维等高线:
x = linspace(-2*pi,2*pi);
y = linspace(0,4*pi);
[X,Y] = meshgrid(x,y);
Z = sin(X) + cos(Y);
figurecontour(X,Y,Z)
grid on
输出图形如下:
[例]绘制误差条图:
y = [11 45 14 19 19];
e = [3.6 4.3 6.4 1.9 1.9];
errorbar(y,e)
输出图形如下:
[例]使用scatter
函数绘制二位散点图:
x = [1:40];
y = rand(size(x));
scatter(x,y)
输出图形如下:
[例]绘制向量图:
[x,y,z] = peaks(30);
[dx,dy] = gradient(z,.2,.2);
contour(x,y,z)
hold on
quiver(x,y,dx,dy)
colormap
summergrid off
hold off
输出图形如下:
[例]绘制方向和速度矢量图:
wdir = [40 90 90 45 360 335 360 270 335 270 335 335];
knots = [5 6 8 6 3 9 6 8 9 10 14 12];
rdir = wdir * pi/180;
[x,y] = pol2cart(rdir,knots);
compass(x,y);
text(-28,15,desc)
输出图形如下:
[例]绘制火柴棍图:
t = linspace(-2*pi,2*pi,10);
h = stem(t,cos(t),'fill','--');
set(get(h,'BaseLine'),'LineStyle',':')
set(h,'MarkerFaceColor','red')
输出图形如下:
[例]绘制复数函数图形:
t = 0:0.5:8;
s = 0.04 + i;
z = exp(-s*t);
feather(z)
输出图形如下:
[例]绘制二维动态: Movie
:
for k = 1:10
plot (fft(eye(k+10)))
axis equal
M(k) = getframe;
endmovie(M,5)
输出图形如下:
注: 由于不可描述的原因,第五章部分详见同专栏下文章《MATLAB数学建模:数据图形可视化-三维绘图函数》。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。