绘制图形的辅助操作
绘制完图形后,可能还需要对图形进行一些辅助操作,以使图形意义更加明确,可读性更强。
一、图形标注
在绘制图形的同时,可以对图形加上一些说明,如图形名称、坐标轴说明以及图形某一部分的含义等,这些操作称为添加图形标注。有关图形标注函数的调用格式如下:
title (图形名称)
xlabel(x轴说明)
ylabel(y 轴说明)
text(x,y, 图形说明)
legend(图例1,图例2,…)
- title 和 xlabel 、ylabel函数分别用于说明图形和坐标轴的名称。
- text 函数是在(x,y) 坐标处添加图形说明。
- 添加文本说明也可用gtext 命令,执行该命令时,十字坐标光标自动跟随鼠标移动, 单击鼠标即可将文本放置在十字光标处。
- legend 函数用于绘制曲线所用线型、颜色或数据点标记图例,图例放置在图形空白处,用户还可以通 过鼠标移动图例,将其放到所希望的位置。除legend 函数外,其他函数同样适用于三维图形, z坐标轴说明用zlabel 函数。
上述函数中的说明文字,除使用标准的ASCII 字符外,还可以使用LaTeX(LaTeX 是一种十分流行的数学排版软件)格式的控制字符,这样就可以在图形上添加希腊字母、数学符号及公式等内容。
在MATLAB支持的LaTeX 字符中,用\bf、\it 、\rm控制字符分别定义黑体、斜体和正体字符,受LaTeX 字符控制部分要加大括号{}括起来。
各个字符既可以单独使用,又可以和其他字符及命令联合使用。
MATLAB 可用的LaTeX字符集
可以通过标准的 LaTeX命令来定义上标和下标,这 样可以使得图形标注更加丰富多彩。如果想在某个字符后面添加上标,则可以在该字符后面跟 一个由“^”字符引导的字符串。若想把多个字符作为指数,则应该使用大括号。
类似地可以定义下标,下标是由下画线(_)引导的。
二、坐标控制
在绘制图形时,MATLAB可以自动根据要绘制曲线数据的范围选择合适的坐标刻度,使得曲线能够尽可能清晰地显示出来。
所以,在一般情况下用户不必选择坐标轴的刻度范围。但是, 如果用户对坐标系不满意,可利用axis 函数对其重新设定。该函数的调用格式如下:
axis([xmin,xmax,ymin,ymax,zmin,zmax])
如果只给出前4个参数,则MATLAB按照给出的x 、y轴的最小值和最大值选择坐标系范围,以便绘制出合适的二维曲线。如果给出了全部参数,则系统按照给出的3个坐标轴的最小 值和最大值选择坐标系范围,以便绘制出合适的三维图形。
axis函数功能丰富,常用的用法还有以下几种。
(1)axis equal: 纵、横坐标轴采用等长刻度。
(2)axis square:产生正方形坐标系(默认为矩形)。
(3)axis auto:使用默认设置。
(4)axis off:取消坐标轴。
(5)axis on: 显示坐标轴。
给坐标加网格线用**grid**命令来控制。grid on/off命令控制是画还是不画网格线,不带参数的grid命令在两种状态之间进行切换。
给坐标加边框用**box** 命令来控制。 box on/off命令控制是加还是不加边框线,不带参数的box 命令在两种状态之间进行切换。
例1 绘制分段函数曲线并添加图形标注。
程序如下:
x=linspace(0,10,100); %产生自变量向量x
y=[]; %y的初始值为空
for x0=x
if x0>=8
y=[y,1]; %将函数值追加到向量y
elseif x0>=6
y=[y,5-x0/2];
elseif x0>=4
y=[y,2];
elseif x0>=0
y=[y,sqrt(x0)];
end
end
plot(x,y)
axis([0,10,0,2.5]) %设置坐标轴
title('分段函数曲线') %加图形标题
xlabel('Variable X') %加X轴说明
ylabel('Variable Y') %加Y轴说明
text(2,1.3,'y=x^{1/2}') %在指定位置添加图形说明
text(4.5,1.9,'y=2')
text(7.3,1.5,'y=5-x/2')
text(8.5,0.9,'y=1')
三、图形保持
一般情况下,每执行一次绘图命令就刷新一次当前图形窗口,图形窗口原有图形将不复存在。
若希望在已存在的图形上再继续添加新的图形,可使用图形保持命令hold。hold on/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态之间进行切换。
例2 用图形保持功能在同一坐标内绘制曲线
y
=
2
e
−
0.5
x
s
i
n
(
2
π
x
)
y=2e^{-0.5x}sin(2πx)
y=2e−0.5xsin(2πx)
及其包络线。
程序如下:
x=(0:pi/100:2*pi)';
y1=2*exp(-0.5*x)*[1,-1];
y2=2*exp(-0.5*x).*sin(2*pi*x);
plot(x,y1,'b:') %绘制两根包络线
axis([0,2*pi,-2,2]) %设置坐标
hold on %设置图形保持状态
plot(x,y2,'k') %绘制曲线
legend('包络线','包络线','曲线y') %加图例
hold off %关闭图形保持
grid %网格线控制
四、图形窗口的分割
在实际应用中,经常需要在一个图形窗口内绘制若干个独立的图形,这就需要对图形窗口进行分割。
分割后的图形窗口由若干个绘图区组成,每一个绘图区可以建立独立的坐标系并绘制图形。同一 图形窗口中的不同图形称为子图。
MATLAB 系统提供了 subplot 函数,用来将当前图形窗口分割成若干个绘图区。每个区域代表一个独立的子图,也是一个独立的坐标系,可以通过subplot 函数激活某一区,该区为活动区,所发出的绘图命令都是作用于活动区域。subplot函数的调用格式如下:
subplot(m,n,p)
该函数将当前图形窗口分成m×n 个绘图区,即m 行,每行 n 个绘图区,区号按行优先编号,且选定第p 个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。
例3 在一个图形窗口中以子图形式同时绘制正弦、余弦、正切、余切曲线。
程序如下:
x=linspace(0,2*pi,60);
y=sin(x);
z=cos(x);
t=sin(x)./(cos(x)+eps);
ct=cos(x)./(sin(x)+eps);
subplot(2,2,1) %选择2×2个区中的1号区
plot(x,y)
title('sin(x)');
axis([0,2*pi,-1,1])
subplot(2,2,2) %选择2×2个区中的2号区
plot(x,z)
title('cos(x)');
axis([0,2*pi,-1,1])
subplot(2,2,3) %选择2×2个区中的3号区
plot(x,t)
title('tangent(x)');
axis([0,2*pi,-40,40])
subplot(2,2,4) %选择2×2个区中的4号区
plot(x,ct)
title('cotangent(x)');
axis([0,2*pi,-40,40])
程序运行结果如图所示。
可以进行更灵活的分割。请看下面的程序。
x=linspace(0,2*pi,60);
y=sin(x);
z=cos(x);
t=sin(x)./(cos(x)+eps);
ct=cos(x)./(sin(x)+eps);
subplot(2,2,1) %选择2×2个区中的1号区
plot(x,y-1)
title('sin(x)-1');axis ([0,2*pi,-2,0])
subplot(2,1,2) %选择2×1个区中的2号区
plot(x,z-1)
title('cos(x)-1');axis ([0,2*pi,-2,0])
subplot(4,4,3) %选择4×4个区中的3号区
plot(x,y)
title('sin(x)');axis ([0,2*pi,-1,1])
subplot(4,4,4) %选择4×4个区中的4号区
plot(x,z)
title('cos(x)');axis ([0,2*pi,-1,1])
subplot(4,4,7) %选择4×4个区中的7号区
plot(x,t)
title('tangent(x)');axis ([0,2*pi,-40,40])
subplot(4,4,8) %选择4×4个区中的8号区
plot(x,ct)
title('cotangent(x)');axis ([0,2*pi,-40,40])
Matlab学习笔记内容来源于《MATLAB程序设计与应用 第三版》刘卫国主编