5.6 图形处理

5.6.1 图形输出

使用MATLAB绘制的各种图形最终的目的是进行输出,MATLAB常用两种不同的方式输出当前的图形。

● 通过图窗口的命令菜单或者是工具栏中的打印或复制选项来输出;

● 使用MATLAB语言提供的内置打印引擎或系统的打印服务来实现图形输出;最后可以使用其他的图形格式存储图形。

第一种方式非常简单,主要用于GUI操作的用户;另一种方式需要了解很多命令,十分复杂,但在进行图形输出时非常高效。

通过命令输出图形的方式很多,包括保存、打印、复制等。这里简单介绍实现打印的函数print的基本调用格式:

    print
    print('argument1', 'argument2', ...)
    print(handle, 'filename')
    print argument1 argument2 ... argumentn

其中,print命令将图形发送到由printopt定义的打印设备和系统打印命令中;filename是输出图形的保存文件名;handle为图形句柄;argumentn可以为以下选项(如表5.5所示)。

表5.5 Argumentn值与描述

5.6.2 图形细化

本小节介绍细化图形的一些操作,包括添加栅格、文字标注等内容。

1.栅格

栅格是用于辅助图形标注尺寸和找正的细线,可以使得图形表达更清楚。MATLAB提供grid命令用于控制栅格:

grid on命令可以在当前图形中添加栅格。

grid off命令可以在当前图形中取消栅格。

单独使用grid命令则可以在on与off状态下交替转换。

grid minor则可以细化栅格。

还可以使用set命令进行设置,如设置三个方向的栅格,打开的命令可以为:

    set(axh, 'XGrid', 'on', 'YGrid', 'on', 'ZGrid', 'on')

对于set命令,本文将后续讲述。

例5-26,栅格绘制示例。

在命令行窗口中输入:

    X = (0:200)*pi/100; Y = 2*sin(X);
    subplot(221); plot(X, Y, 'LineWidth', 2); xlim([0 2*pi]); title(’无栅格’);
    subplot(222); plot(X, Y, 'LineWidth', 2); xlim([0 2*pi]); grid on; title(’有栅格
');
    subplot(223); plot(X, Y, 'LineWidth', 2); xlim([0 2*pi]); grid on; grid; title('
栅格切换后’);
    subplot(224); plot(X, Y, 'LineWidth', 2); xlim([0 2*pi]); grid on; grid minor;
title(’细化栅格’);

命令行窗口无输出。得到的图形如图5.26所示。

图5.26 栅格绘制示例

2.标注

在绘图时,常需要进行一些文字标注来更加清楚地表达图形意义。MATLAB提供的图形标注命令如下所示:

● title功能为在图窗口顶端的中间位置输出字符串作为标题。

● xlabel功能为在x轴下的中间位置输出字符串作为标注。

● ylabel功能为在y轴边上的中间位置输出字符串作为标注。

● zlabel功能为在z轴边上的中间位置输出字符串作为标注。

● text(x, y, 'text') 功能为在图窗口的(x, y)处写字符串’text'。坐标x、y按照与所绘制图形相同的刻度给出。对于向量x和y,字符串’text’写在(xi, yi)的位置上。如果’text’是一个字符串向量,即一个字符矩阵,且与x、y有相同的行数,则第i行的字符串将写在图窗口的(xi, yi)的位置上。

● text(x, y, 'text', 'sc') 功能为在图窗口的(x, y)处输出字符串’text'。图窗口左下角的坐标为(0.0,0.0),右上角的坐标为(1.0,1.0)。通过gtext('text')使用鼠标或方向键,移动图窗口中的十字光标,让用户将字符串text放置在图窗口中。当十字光标移到所期望的位置时,按下任意键或单击鼠标上的任意按钮,字符串将会写入窗口中。

● legend('string1', 'string2', ... , 'Location', 'location') 功能为在当前图上输出图例,并用说明性字符串string1、string2等作标注。其中参数’location’的可选项目列表如表5.6所示。

● legend off功能为从当前图形中清除图例。

表5.6 location可选设置

例5-27,文字说明示例。

在命令行窗口中输入:

    t = -pi:pi/20:pi;
    x=cos(t);
    y=sin(t);
    subplot(131); plot(t, x); title('Only Title Marked');
    subplot(132); plot(t, y); title('Title& Legend'); xlabel('t'); ylabel('y');
    subplot(133); plot(x, y); title('With Text
Mark'); text(0,0, 'circle'); xlabel('x'); ylabel('y');

命令行窗口无输出。得到的图形如图5.27所示。

图5.27 文字说明示例

3.特殊字符控制

这里提到的特殊字符包括上下标字符和不常见字符,相应的控制方法如表5.7和表5.8所示。

表5.7 上下标的控制命令

表5.8 特殊字符

例5-28,特殊字符示例。

在命令行窗口输入:

    subplot(121); plot(0:0.01:1,1- (0:0.01:1).^2)
    text(0.5,0.75, ' \leftarrow x^2')
    subplot(122); plot(0:pi/20:2*pi, sin(0:pi/20:2*pi))
    text(pi,0, ' \leftarrow sin(\pi)')

命令行窗口无输出。得到的图形如图5.28所示。

图5.28 特殊字符示例

4.字体样式

MATLAB中的字符串可以对输出的文字风格进行预先设置,可以预先设定的有:字体、风格、大小及颜色,如表5.9所示。

表5.9 字体样式设置

注意

文字颜色(\color{colorSpec})请参考帮助文档。

例5-29,字体样式设置示例。

在命令行窗口输入:

    text(.1, .5, ['\fontsize{16}black {\color{magenta}magenta '...
    '\color[rgb]{0 .5 .5}teal \color{red}red} black again'])

命令行窗口无输出。得到的图形如图5.29所示。

图5.29 字体样式设置示例

5.6.3 坐标轴控制

默认情况下,MATLAB可通过内部自适应设置坐标轴,但有的时候,默认设置生成的图形往往达不到要求的效果。这时就可以使用MATLAB提供的坐标轴控制函数(如表5.10所示)来调整和设置坐标轴的某些参数。

表5.10 MATLAB的坐标轴控制函数

例5-30,坐标轴设置示例。

在命令行窗口输入:

    X= -5*pi:pi/20:5*pi;
    Y=cos(X);
    subplot(131); plot(X, Y, 'LineWidth', 2); title(’自动’);
    subplot(132); plot(X, Y, 'LineWidth', 2); xlim([0 10]); title(’设置X轴’);
    subplot(133); plot(X, Y, 'LineWidth', 2); axis tight; title(’显示整个数据范围’);

命令行窗口无输出。得到的图形如图5.30所示。

图5.30 坐标轴设置示例

5.6.4 视角与透视

从不同的位置和角度观察三维视图,可以发现图形会有不同的效果,另外不同透明度的图形效果也大不相同。MATLAB提供了对图形视角与透视的功能。

1.视角控制命令

MATLAB提供的视角控制函数主要有view和rotate3D等。下面介绍view函数的用法,而rotate3D等函数的用法请读者参考帮助文件。

view函数可以设置立体图形的观察点,其调用格式如下:

    view(az, el)/view([az, el])
    view([x, y, z])
    view(2)
    view(3)
    [az, el] = view

其中,az为方位角,el为仰角;[x, y, z]设置指向原点的视角方向;view(2)函数设置默认的二维形式视点;view(3)函数设置默认的三维形式视点。

例5-31, view命令设置视点示例。

在命令行窗口输入:

    [X, Y, Z]=peaks(30);
    subplot(221); surf(X, Y, Z, Z); axis tight; view(-37.5,30);
    subplot(222); surf(X, Y, Z, Z); axis tight; view([1 1 2]);
    subplot(223); surf(X, Y, Z, Z); axis tight; view(2);
    subplot(224); surf(X, Y, Z, Z); axis tight; view(3);

命令行窗口无输出。得到的图形如图5.31所示。

图5.31 view命令设置视点示例

2.三维透视命令

在MATLAB中使用mesh等命令绘制网格曲面时,在默认情况下会隐藏重叠在后的图形,但使用透视命令hidden可对这种隐藏功能进行设置。该函数的调用格式如下:

    hidden on
    hidden off
    hidden

该函数的使用方法同hold函数一致,可参考hold函数的使用说明。

例5-32,透视命令使用示例。

在命令行窗口输入:

    [X, Y, Z]=peaks(30);
    subplot(121); mesh(X, Y, Z, Z); axis tight; title(’不透视’);
    subplot(122); mesh(X, Y, Z, Z); axis tight; hidden off; title(’透视’);

命令行窗口无输出。得到的图形如图5.32所示。

图5.32 透视命令使用示例