求用matlab绘制图片

  参加学术活动偶尔会遇到这样嘚情况:报告人口若悬河,滔滔不绝地讲着他的PPT “..... 上面所说的情况可以用这张图来说明......”观众在下面瞪大了眼睛,想极力辨认图中的细節却什么都看不清。此时报告人多半也意识到出现了问题,向观众说声抱歉并解释说:“这个图在电脑屏幕上看效果很好,不知为什么在投影仪上显示不清楚.....”

      我第一次作课程试讲时,一位有经验的老教师就指出课件中的一些文字有点小前排的学生可以看清楚,泹后排的学生辨认起来会比较吃力以前还听同事讲过一位华裔诺贝尔奖获得者的轶事:那位先生让学生讲工作报告时,会坐在带轮子的扶手椅上沿着过道滑到会议室的最后,如果在那里看不清楚PPT上的内容就当场把学生轰下去。

       不管怎么说图表是论文、报告、课件等攵档的重要内容之一。高质量的图表给读者以视觉上的享受并帮助他们理解相关的知识。虽说现在有很多软件可以自动生成各种图表泹如果我们对图表的质量有很高要求的话,那么这些傻瓜式的工具可能就不再适用了我们需要从底层了解图表生成的细节。

       每种画图软件都有其特点在较短的篇幅内全面、详细介绍这些软件不太现实,结合一款软件把画图过程的核心内容说清楚就可以了在这里我选用鼡户群比较广泛的Matlab。

一、屏幕(纸)坐标系和世界坐标系

 对于Matlab来说我们的目标是用图的方式把一批数据给表现出来。数据有大有小可鉯相差好几个数量级,然而纸张或屏幕的大小是限定的因此我们需要用两种坐标系统来表示位置。一种是屏幕(纸)坐标通常用(m,n)來表示。以像素为单位(m,n)表示屏幕上第m行,第n列个像素的位置另一种是世界坐标,一般用(x,y)来表示它表明的是一个点在数据空間的位置。

       给定世界坐标原点在屏幕坐标的位置以及相应的比例尺,同样一个点在世界坐标和屏幕坐标中的坐标值是可以相互转换的茬这里,我们不去关心转换的细节

height],left为图的左下角与屏幕左边缘的距离bottom为图的左下角与屏幕底边的距离,width和height分别为图的宽度和高度這四个数字的单位都为像素(px)。类似的当Matlab向打印机或文件输出图形时,图的位置也有类似的定义只不过会采用英寸、厘米、毫米等單位。

图1:图(Figure)在屏幕中的位置示意图

 在数学中,点是没有大小的线是没有宽度的,而在一张实际的图像中点需要有一定的大小,线需要有一定的宽度Matlab画图时,图中的元素(例如文字、图标等等)的参考位置总是用世界坐标来表示不需要赋予单位,而元素的大尛则有单位输出到屏幕时,通常以像素为单位输出到纸张时,通常用英寸、厘米、毫米等长度单位在图2的例子中,通过编程(参考礻例程序example11.m)可以找出本图的标题(title)的中心位置为(4.99,1.03)是用世界坐标表示的;标题区域为[4.30, 1.01, 1.33, 0.08],其中前两个数为X和Y方向的起始坐标后两个數分别为在X和Y方向的宽度,同样也用世界坐标;标题的文字大小为10个像素用了具体的长度单位。

图2:示例图1为1Hz的正弦信号的波形图。

       茬绘制图2所示的例图时我们使用了Matlab默认的参数,然后在菜单栏用‘另存为’功能将图保存为PNG格式的图片相当于对屏幕进行硬拷贝。这張图的质量比较差具体体现在:一、图像的分辨率很低,只有560x420像素;二、文字太小看不清楚,Matlab默认的文字大小为10px;三、坐标轴和曲线仳较细整个图看上去相当单薄。

      好在Matlab提供了灵活、简便的方法可修改图中各种参数的数值。图3是经过改进后的一个示例图在这张图Φ,我们作了如下改进:

  1. 通过设置'FontSize'将标题的字符大小由10px增加到20px;X、Y轴标签的字符大小由10px增加到16px;

图3:示例图2,为1Hz(蓝实线)和3Hz(红虚线)信号的波形图

       相比于示例图1,示例图2有了很大的改进不过其整体视觉效果仍然欠佳,原因是这个图是用屏幕硬拷贝的方式保存的其分辨率只有560x420像素。要获得高质量的最终图像我们需要用到Matlab的图像输出功能。下一部分将介绍这方面的内容

        前面已经介绍过,Matlab的绘图結果可以输出到屏幕也可以输出(打印)到纸张上,或者保存为某种格式的图像屏幕的分辨率有限,通过硬拷贝获得的图像质量一般要获得高质量的图像,目前通常的做法是把绘图结果保存到图像文件中

 可以使用Matlab的print()函数来将绘图结果输出到图像文件中。该函数的参數’-dxxx'用来指定输出图像的格式例如要生成无损压缩的PNG格式的点阵图像,对应的设置为'-dpng'影响图像质量最重要的参数是'-rnnn',该参数指定输出圖像的分辨率单位是“像素/英寸”。例如若图像的目标分辨率为100像素/英寸则对应的参数设置为'-r100'。

 为了便于比对图像的质量我们将示唎图二(图3)所绘制的图形分别以70像素/英寸、140像素/英寸和280像素/英寸的分辨率输出到PNG格式的点阵图像中(如图4、5、6所示)。在默认的情况下Matlab的图像输出区域大小为8英寸X6英寸,70像素/英寸对应的输出图像的大小正好为560X420像素与屏幕输出的图像大小一致。相应的140像素/英寸和280像素/渶寸分辨率对应的图像大小分别为像素和像素。在图4、5、6中为了便于比较,我们将三张图统一缩放至640X480像素大小在Macbook Pro的Retina显示器上,图像质量的高低对比颇为明显若显示器的分辨率比较低,可以在浏览时按‘Cntr + '+'’将页面放大后再进行比较

图4:示例图2的PNG格式图像输出,分辨率70潒素/英寸

图5:示例图2的PNG格式图像输出,分辨率140像素/英寸

图6:示例图2的PNG格式图像输出,分辨率280像素/英寸

       print()函数还可以将绘图结果输出成EPS格式的矢量图。很多专业期刊要求在稿件中使用矢量图这样的图片在进行缩放时不会降低质量,无论是在pdf文档中显示还是印刷到纸质期刊上,效果都相当不错因在网页中无法显示,我将EPS格式的图像放在附件中()感兴趣的读者可下载查看。

       原本只是想自己在学习Matlab画圖的过程中草草做些网络笔记,不至于轻易忘记所学内容没想到一路下来,所查看的内容还不少且相当凌乱。遂起了念头干脆好恏整理一下,也算是自己的一个劳动成果吧

       科研工作中涉及到的画图技巧还有很多,等积累到一定程度再写第二篇博客文章!

转载本攵请联系原作者获取授权,同时请注明本文来自周建锋科学网博客

}

matlab新手求教matlab绘图问题:x=0,这个平面图怎麼画出来,要表现在三维图里.
一般情况的平面,形如AX+BY+CZ+D=0的平面方程怎么用matlab画出三维图像呢...主要是在做第一类曲面积分时经常要找积分路径,我想用matlab畫出来...

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信