我们将讨论简单的二维图象(之前已有所介绍)的附加特性。这些特性将允许我们控制 x,y 轴上的值的范围,在一个坐标系内打印多个图象,或创建多个图,或在一个图象窗口内创建多个子图像,或提供更加强大的轨迹文本字符控制。还有,我们将向大家如何创建极坐标。
1 控制 x,y 轴绘图的上下限
在默认的情况下,图象的 X
,
Y 轴的范围宽到能显示输入值的每一个点。但是有时只显示这些数据的一部分非常有用,这时你可以应用
axis
命令
/
函数。
axis 命令
/
函数的一些形式展示在表1
中。其中两个最重要的形式在表中用黑体字标出——它允许程序员设定和修改坐标的上下限。所有形式的完全列表将会在
MATLAB 的在线文件中找到。
为了说明 axis
的应用,我们将画出函数
f(x)=sinx
从
-2π
到
2π 之间的图象,然后限定坐标的区域为
0≤x≤π
,
0≤y≤1
。
表1 axis函数/命令的形式
一些 MATLAB
命令似乎不能确定它是个函数还是一个命令。例如,有时
axis 它好像是命令,有时它好像是函数。有时我们把它当作命令
:axis on,在其他时候,我们把他当作函数
:axis([0 20 0 35])
。遇到这样的情况怎么办
?
一个简单的答案是 MATLAB
命令是通过函数来实现的。MALTAB 编译器无论什么时候遇到这个命令,它都能转化为相应的函数。它把命令直接当作函数来用,而不是应用命令语法。下面的两个语句是等价的:
axis on;
axis ('on');
无论什么时候 MATLAB 遇到一个命令时,它都会转化一个函数,当命令的参数当作字符串看作相对应函数的参数。所以编译器翻译如下命令
:
garbage 1 2 3
为
garbage ('1', '2', '3')
注意只有带有字符参数的函数才能当作命令。带有数字参数的函数只能被当作函数。这就是为什么 axis 有时当作命令,有时被当作函数。
x=-2*pi:pi/20:2*pi;
y=sin(x);
plot(x,y);
title('Plot of sin(x) vs x');
当前图象坐标轴的上下限的大小由函数 axis 得到。
修改坐标轴的上下限可以调用函数 axis([0 pi 0 1])。当这个函数执行后,产生的图象如下图所示。
2 在同一坐标系内画出多个图象
在一般情况下,创建一个新的图象就要用到一个 plot 命令,前面的数据就会自动消失。这种行为可以通过使用
hold
命令得到修改。当
hold on 命令执行后,所有的新的图象都会叠加在原来存在的图象。
hold off 命令可恢复默认情况,用新的图象来替代原来的图象。
例如,在同一坐标轴内的画出 sinx
和
cosx
的图象。产生的图象如下图
所示。
x=-pi:pi/20:pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,'b-');
hold on;
plot(x,y2,'k--');
hold off;
legend ('sin x','cos x');
3 创建多个图象
MATLAB 可以创建多个图象窗口,每个窗口都有不同的数据。我们用
图象数来区分这 些图象窗口,
图象数
是一个小的正整数。第一个图象窗口称为图
1,第二个图象窗口为图2,依次类推。这些窗口中的一个称为当前图象窗口,所有的新的画图命令将会展示在那个窗口中。
我们用 figure
函数来选择当前窗口。这个函数的形式为“
figure(n)
”,其中
n 代表图象数。当这个函数被执行后,图
n 将会变为当前图象,执行所有的画图命令。如果这个图象窗口不存在,那么
matlab 将会自动创建。当前图象也可以用鼠标单击选择。gcf 函数用于当于返回当前图象数。当你需要知道当前图象数时,你就把这个函数写入M 文件中。下面的命令用于说明图函数的应用。它将创建两个图象,第一个用来展示 e^
x 的图象,第二个用来展示
e^(
-x)
的图象。
4 子图象
在一个图象窗口中有一系列的坐标系,创建出多个子图象。创建子图象要用到 subplot命令其形式如下
subplot(m,n,p)
这个命令在当前图象窗口创建了 m×n 个子图象,按 m 行,n 列排列,并选择子图象 p来接受当前所有画图命令。这些子图象以从左向右从上到下编号。例如,命令 subplot(2,3,4)将会创建 6 个子图象,而且 subplot 4 是当前子图象。如果 subplot 命令创建的新坐标系与原来的坐标系相冲突,那么原来的坐标系将会被自动删除。下面的命令将会在同一窗口中创建两个子图象,每一个子图象独立地展示不同的图象。产生的图象如下。
5 对画线的增强控制
之前我们学习了如何设置画线的颜色,样式,符号形式。我们还可以设置其中的
4
种附加的属性。
在plot 命令中,在自变量和函数之后被指定,形式如下:
plot(x,y,'PropertyName',value,...)
6 文本字符串的高级控制
我们在画图中可能要用到文本字符串(
比如标题,坐标轴标签
),这些字符串我们可以黑体,斜体来格式化,也包括特殊的希腊或数学符号。文本的字体通可以通过 stream modifiers 修改。一个 stream modifier 是一个特殊的字符序列,用来告诉编译器改变它的行为。最普通的 stream modifiers 是:
一旦一个 stream modifier 插入一个文本字符串中,它持续发挥作用,直到这个字符串的结束或消失。如果一个
modifier
后在跟着一个
{}
,只有{}中的文本起作用。特殊的希腊字母或数学符号也可用在文本字符串中。通过嵌入特殊的转义序列来创建这些字符。这些转义序列是支持
T
E
X
语言的特殊序列的一个子集。在下表
中向大家展示一些转义序列代码的例子。所有转义序列可以在
matlab 在线帮助文本中找到。 如果要打印转义符
\
,
{
,
}
,
_
,或
^
就必须在前面加上一个反斜杠。
下面的例子用于说明
stream modifier
和特殊字符的应用。
7 极坐标图象
Matlab 中包括一个重要的函数叫做
polar
,它用于在极坐标系中画图。这个函数的基本形式
如下
:
polar(theta,r)
其是
theta
代表一个弧度角数组,
r 代表一个距离数组。它用来画以角度为自变量的函数的极坐标图是非常有用的。
心形麦克风
为舞台表演设计的麦克风大多都是定向麦克风,它能够增大来自演唱者的信号,抑制后面观众的噪声信号。一个心形麦克风的增益
gain
是关于角度θ的函数,关系式如下
其中 g
是和特定的心形麦克风有关的常量。
θ 是声源和麦克风之间的夹角。假设一个麦克风的
g
是
0.5
,画出函数
Gain
的极坐标图。
我们必须计算出与角度对应的函数值,然后画出相应的极坐标图。产生的结果如下图所示。注意这种麦克风叫做心形麦克风,所以得出来曲线的形状像颗心。
% 脚本文件: microphone.m
%
% 目的:
% 该程序绘制了一个心形麦克风的增益图案。
%
% 定义变量:
% g - 麦克风增益常量
% gain - 角度函数的增益
% theta - 角度,相对于麦克风轴(弧度)
%
% 计算角度与增益
g = 0.5;
theta = 0:pi/20:2*pi;
gain = 2 * g * (1 + cos(theta));
% 绘制增益
polar(theta, gain, 'r-');
title('角度\it\theta对增益的影响');