〖例〗正弦曲线绘制:
>> t=0:.1:2*pi; %生成横坐标向量,使其为 0,0.1,0.2,...,6.2
y=sin(t); % 计算正弦向量
plot(t,y) %绘制图形
这样立即可以得出如图所示的二维图 [4.1(a)]
plot() 函数还可以同时绘制出多条曲线,其调用格式和前面不完全一致,但也好理解。
>> y1=cos(t); plot(t,y,t,y1); %或 plot(t,[y; y1]), 即输出为两个行向量组成的矩阵。
图形见 4.1(b)。
plot() 函数最完整的调用格式为:
>> plot(x1,y1,选项1, x2,y2, 选项2, x3,y3, 选项3, ...)
其中所有的选项如表 4.1 所示。一些选项可以连用,如 '-r' 表示红色实线。
| 由 MATLAB 绘制的二维图形可以由下面的一些命令简单地修饰。如
>> grid % 加网格线 得出的图形如右图所示。 axis() 函数可以手动地设置 x,y 坐标轴范围 还可以使用 plotyy() 函数绘制具有两个纵坐标刻度的图形。 |
![]() |
subplot(n,m,k)
其中,n 和 m 为将图形窗口分成的行数和列数,而 k 为相对的编号。例如在标准的 Bode 图绘制中需要将窗口分为上下两个部分 (即n=2, m=1), 分割后上部编号为 1,下部编号为 2。
MATLAB 从 4.0 版本开始就提出了句柄图形学 (Handle Graphics) 的概念,为面向对象的图形处理提供了十分有用的工具。和早期版本的 MATLAB 相比较,其最大区别在于,它在图形绘制时其中每个图形元素
(比如其坐标轴或图形上的曲线、文字等) 都是一个独立的对象。用户可以对其中任何一个图形元素进行单独地修改,而不影响图形的其他部分,具有这样特点的图形称为向量化的绘图。这种向量化的绘图要求给每个图形元素分配一个句柄 (handle), 以后再对该图形元素做进一步操作时,则只需对该句柄进行操作即可。
MATLAB 5.0 版进一步加强了图形绘制的功能,而 5.3 版绘图又具有自己的新特色。例如它提供了新的图形编辑程序,并定义了一些新的三维绘图函数等。本章将主要介绍 MATLAB 5.3 版本的应用与特性,并介绍部分有关句柄图形学的内容。其余有关句柄图形学的问题,如窗口特性设置、图形界面设计等项内容将在第 6 章中讲述图形界面设计内容时详细介绍。MATLAB 6 也在图形显示,特别是三维图形显示与照相机参数设置等方面引入了新鲜的内容。
MATLAB 定义的各种图形对象及其关系如下图所示。

对象的通用属性如下表所示。

获取和改变对象的属性可以采用 get() 和 set() 函数对来实现。
>> set(句柄, 属性1,属性值1, 属性2,属性值2,...)
>> 属性值=get(句柄,属性)
坐标轴对象时 MATLAB 图形中常用的对象,坐标轴对象可以用 MATLAB 5.3 上的菜单项添加。添加之后,可以用鼠标改变其大小和形状,其他一些属性说明如下:
XTick 和 XTickLabel 属性: XTick 属性将给出 x 轴上标尺点值的向量,而 XTickLabel 将存放这些标尺点上的标记字符串。对 y 和 z 轴也将有相应的标尺属性,如 ZTick 等。
字符对象及其属性
文字标注是图形修饰中的重要因素,它可以是用户在窗口上随意添加的字符说明,还可以是坐标轴对象中所用到的刻度标志等。字符对象的常用属性如下:
MATLAB 字符串中可以直接使用的一些 TeX 命令见表 4-3。


〖例〗给出下面的MATLAB命令
>> t=['\partial(f_ip)/\partialt=-\Sigma_{i=1}^n\partial(f_ip)/',...
'\partialx_i + 0.5\Sigma_{i=1}^n\Sigma_{j=1}^n',...
'\partial^2(b_{ij}p)/\partialx_i\partialx_j'];
tt=str2mat(t,'Y(\omega)=\int_0^\infty y(t)e^{-j\omegat}dt');
[x,y]=ginput(1); text(x,y,tt);
则将得出如下图所示的结果。看见较复杂的数学公式也可以在 MATLAB 窗口中显示出来。

〖例〗分形理论是一个很有趣的领域,在这里我们给出一个简单的例子。任意选定一个二维平面上的初始点坐标 (x0, y0),假设我们可以生成一个在 [0,1] 区间上均匀分布的随机数 gi,那么根据其取值的大小,可以按下面的公式生成一个新的坐标点 (x1,y1):

从新坐标再根据随机数计算下一个点,如此类推。可以将上面的算法编写出下面的 MATLAB 函数
function [x,y]=frac_tree(x0,y0,v,N)
x=[x0; zeros(N-1,1)]; y=[y0; zeros(N-1,1)];
for i=2:N
vv=v(i);
if vv<0.05, y(i)=0.5*y(i-1);
elseif vv<0.45,
x(i)=0.42*(x(i-1)-y(i-1)); y(i)=0.2+0.42*(x(i-1)+y(i-1));
elseif vv<0.85,
x(i)=0.42*(x(i-1)+y(i-1)); y(i)=0.2-0.42*(x(i-1)-y(i-1));
else,
x(i)=0.1*x(i-1); y(i)=0.1*y(i-1)+0.2;
end
end
| 调用此函数,我们可以由下面的 MATLAB 命令生成 10,000 个这样的点,并将这些点 在 MATLAB 图形窗口中用点的形式表示出来,如图所示。 >> N=10000; v=rand(N,1); [x,y]=frac_tree(0,0,v,N); h=plot(x(1:10000),y(1:10000),'.'), 给出下面的命令可以设置绘图点的大小: >> set(h,'MarkerSize',4) 对大的 N 值,计算量大,可以考虑采用MEX C格式改写 MATLAB 函数以加快速度。 |
![]() |
