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 透视命令使用示例