Matlab作曲线图plot基础理论篇

时间:2024-03-02 14:23:36

本文为原创,如有理解错误的地方,欢迎批评指正!


最近在写论文的时候贴matlab作出的曲线图弄得很头疼,因为论文中贴的图较小,每条线代表什么要弄得很清晰;要照顾黑白打印版论文的感受,线之间不能仅靠颜色区别。边看文档边上网查,把画图方法、标注方法、保存方法整理一下方便以后查看。

画图的最基本语法是:

 

plot(x1,y1,LineSpec1,\'Name\',value,...,xn,yn,LineSpecn,\'Name\',value);

其中可以设置属性的部分为LineSpec和\'Name\',Value,拟合的曲线可以由不同线型的线或一些标记(marker)组成,也可以线和标记同时用就像把标记用线串成一个手链一样。这里LineSpec针对线型、标记种类和线颜色;\'Name\',Value参数对针对很多参数,详细的可以在matlab帮助文档中搜索lineseries properties,本文第二节中会介绍一些常用的。接下来按照每个参数列出可能的取值。

 


一. LineSpec

线型一共就4种:\'-\'实线、\'--\'短划线、\':\'虚线、\'-.\'点划线。

标记好多种:\'o\'、\'+\'、\'*\'、\'.\'、\'x\'、\'s\'方块、\'d\'方片、\'^\'上三角号、\'v\'下三角号、\'>\'向右的三角号、\'<\'向左的三角号、\'p\'五角星、\'h\'六角形。

线的颜色:\'y\'黄色、\'m\'洋红、\'c\'青色、\'r\'红色、\'g\'绿色、\'b\'蓝色、\'w\'白色、\'k\'黑色。

 LineSpec在使用的时候神奇之处在于根本不用声明你改得是哪个参数,只要写在那它就认识,而且可以任意组合任意交换位置。举几个例子:

 

plot(x,y,\'b--o\');%蓝色带圈的短划线
plot(x,y,\'--gs\');%绿色带方块的短划线
plot(x,y,\'c*\');%青色的*描点

 

 

二. \'Name\',Value参数对

参数对既针对线又针对标记,常用的参数有以下的几个:

\'LineStyle\':还是修改线型的,取值就是第一章中介绍的四种线型(本来取值还有一个none,就是不画线,不画线干嘛要这么写呢?始终不理解)。最方便的还是用第一章中直接设置的方式。

\'Color\':设置线条颜色的。这里主要针对在LineSpec中不能用现有的颜色表达的情况,比如我想自己用RGB调出一个我喜欢的颜色,直接用[R,G,B]指定就可以了,比如[1,0.6,0]。

\'LineWidth\':设置线宽,单位为点(point),1point=1/72 inch。默认的线宽是0.5point。

\'Marker\':设置标记形式,标记的形式也是和第一章一样,和线型一样可以用第一章中的方法直接指定。

\'MarkerEdgeColor\':标记轮廓的颜色,取值同线条颜色的取值。

\'MarkerFaceColor\':标记填充的颜色,取值同线条颜色的取值。

\'MarkerSize\':标记的大小,单位为点(point)。默认值为6。


三.标注方法

标注分为坐标轴的标注和每条曲线线代表什么的标注。

坐标轴标注

直接使用xlabel、ylabel和title函数。如果在表示坐标轴单位的时候需要用到平方之类的,可以给需要上标的每一个字符前面加上一个"^",例如:

 

xlabel(\'Cn^2/m^-^2^/^3\');

显示出来的效果就是:

 

 

曲线标注

在一个图表中画了很多曲线的时候可以用legend函数标注:

 

legend(\'A\',\'B\',\'C\');%代表三条曲线

需注意的是,legend中变量的顺序要和plot中的顺序对应。通过设置\'Fontsize\'参数改变字体大小。

 

我还没有查到有什么办法可以自动调整legend框的大小的,如果有什么好办法的话,请告诉我。


 

四.图表保存方法

当然可以手动保存,但是当一下子输出了20几张图表的时候还是希望程序能给文件名自动标号保存好。这一部分可以参考一下这篇博客中介绍的imwrite、print和saveas三个函数,非常详细。

如果希望保存成放大也不虚的图片可以存为.eps的矢量图:

 

saveas(gcf,strcat(num2str(t),\'.eps\'));

这里gcf为当前窗口中图的句柄,t是用来实现对好多张图保存成文件时自动标号的。这个语句的问题是在保存的时候彩色会丢失,得到的是一个黑白的图,这个时候加一个\'psc2\'就可以解决:

 

saveas(gcf,strcat(num2str(t),\'.eps\'),\'psc2\');