5.6.2 要注意的几个问题

5.6.2 要注意的几个问题

图形输出中还有几个很容易疏忽的问题需要提醒一下。

(1)图形有边界

图5-39是MATLAB的标准图形。可以看出,坐标系(Axes)的底色是白的,图形的底色是灰色的(这是为了区别绘图区与非绘图区)。但MATLAB输出的图形包括绘图区和非绘图区,即整个图形(除菜单和工具条外)。因此,一般情况下输出的图形如图5-40所示。

图5-39 MATLAB的标准图形

图5-40 默认设置下MATLAB输出的图形

这样的输出效果不够美观,可以做简单的修改将灰边去掉:在“Figure”菜单的“Edit”下,有一个“Copy Options”选项,单击该选项,则出现图5-41所示的对话框,将“Figure background color”中的“Force white background”选中即可。

图5-41 MATLAB图形输出的设置

去掉了灰边的图形美观了很多。但还有一个问题,即输出或粘贴的图形包含了图5-40中灰边所占的区域,虽然可以将灰边改为白边,但这部分区域包含在图形区域中。一般来说,图形边界应该是有一些空白的,但有时由于版面的原因,这些空白可能是多余的。MATLAB的图形输出设置中也有去除这个边界空白的选项。在“File”菜单下单击“Export Setup”选项,可显示如图5-42所示界面。将“Expand axes to fill figure”项选中,则输出的图形会将边界去掉,如图5-43所示[12]

图5-42 MATLAB图形输出设置

图5-43 去掉多余边缘的MATLAB图形

(2)印刷用图形要注意的问题

有时会发现这样一种情况:绘制好图形后,将其贴在文章中交给期刊社或出版社发表印刷,等收到期刊或书籍后,一般情况下会发现出版物上的图形质量大大降低了,原来在显示器上能看清楚的内容现在看不清了。这就是说,显示与印刷是不同的。这种质量降低程度也是因期刊社或出版社而异。有的期刊社或出版社很注意图的质量,经常需要作者单独提供高分辨率图形,这样图形的印刷效果会好一些。但即使这样,印刷质量依然不及显示质量。大多数科研人员的图是要用来印刷的,因此要有一个认识:要使图能够印刷得清楚,而不只是在电脑显示器上能看得清楚。

这里要注意两个问题:

一是字体要足够大,否则看不清楚。MATLAB默认绘图字号是8,如果在文中将图缩小,印刷出来的字体可能就看不清楚了。因此,要将字体改大一些。

二是颜色问题。期刊、论文、书籍一般都是单色印刷的,即黑白版,所以,在绘制印刷品中的图形时,可按5.5.2节中介绍的方法将colormap改为灰度系列。否则,绘制了一个彩色图,但印刷出来后,往往还不如灰度图好看。例如,一个等值线图,常用蓝色表示最小值,用红色表示最大值,但蓝色和红色用黑白打印机打出来后都接近于黑色。而如果用灰度系列的颜色绘制,黑色表示最小值,白色表示最大值,看起来就清楚多了。即使这样,灰度的色阶也不要太多。因为打印机或者印刷机能表现出的色阶有限,一般以16阶左右为宜。

例20:用灰度调色板绘制一个等值线图。

结果如图5-44所示。

图5-44 用灰度调色板填充的等值线图

(3)一图多版本

为什么要一图多版本地保存?

上文说过,绘好的图形输出时有多种选择。按图像格式不同,可以有矢量图与位图;按图形颜色不同,可以有黑白图与彩色图。那么,究竟输出成什么格式呢?这由所绘制的图形的用途来决定。上文针对出版物给出了一些建议。但有时图形不仅用在出版物上,还可能用于给别人展示或用在演讲的幻灯片上等。因此,作者建议绘制好一个图形后,尽可能地保存多个版本。

矢量图用于粘贴在出版物中;位图用于向别人展示。

黑白图像主要用在出版物中,但向人展示或者用幻灯片演讲时,彩色图像显然更好。

(4)图形的批量输出

上文已提及,MATLAB图形的输出可以用鼠标单击“Figure”→“File”→“Save as”项。但如果一次要用程序绘制100个图形,同时需要将其保存,这种方法显然太不具有可操作性了。

MATLAB中提供了用命令输出图形的方法,即print函数。print函数的功能就是将“figure”中的图形输出到文件中。

如,

将当前“figure”上的图形保存成fig1.jpg文件。

print函数的其他用法读者可通过“Help”自行学习。

【注释】

[1]后面介绍的三维绘图函数也有类似的用法。

[2]这是MATLAB中的peaks函数。

[3]可以将TeX理解为一种排版语言。TeX中对于文字的格式及一些特殊符号,都是用命令的方式表达的。

[4]关于TeX与LaTeX的具体知识,读者可自行查阅相关资料。

[5]用TeX的人一般比较不屑于用Word,可见其功能之强大。

[6]在我国台湾的大多数教科书中,这个词翻译为“把柄”,这好像更容易理解。

[7]MATLAB绘图是用程序控制的(当然也可以用鼠标控制),在绘图方面,这是区别于普通绘图软件最大的地方。

[8]绘图元素是指所有在MATLAB图形上出现的事物。按照“面向对象”的编程思想来讲,所说的元素就是类(Class)。为了照顾到未接触过OOP的读者,这里以元素一词代替。

[9]参照GUI设计的相关知识:GUIDE的使用。

[10]有时也不尽然。首先,在目前的机器运算速度下,矢量图显示基本上感觉不出来慢。而位图,如果太大,调入内存时需要一定的时间。

[11]有些好的期刊上要求提供所有数据图形的矢量图格式。而位图,也需要很大分辨率的版本,就是担心一旦位图在缩小后失真,会使印刷质量下降。

[12]当然,这一步操作完全可以用图像处理软件甚至Word中的图像编辑功能代替。