Matlab绘制图形知识点总结(一)

        在实际的操作中,我们能够通过代码设计轻松命令Matlab绘制图形,下面是为总结Matlab最常用的几种绘图函数(包括二维与三维制图)。

一、二维图像绘制函数plot()

        1.plot(X,Y);       

        当且仅当X,Y均为实数向量且维数相同(相同长度的行向量或者相同长度长度的列向量)时有效,Matlab将会按照其顺序一一对应其横坐标及纵坐标即  [X(i),Y(i)]。若X或者Y均为复数变量,则会忽略虚数部分。

X=[1 2 3 4 5 6 7 8];    %均为行向量或者均为列向量
Y=[8 7 6 5 4 3 2 1];
plot(X,Y);
X=[1 2 3 4 5 6 7 8+6i];    %Matlab画图时提示警告自动忽略虚数部分
Y=[8 7 6 5 4 3 2 1+6i];
plot(X,Y);

(上述两者画出来的图形一致)

        若X、Y一个为向量,一个为矩阵,且向量长度等于矩阵的行数或者列数,函数会按行或者列将矩阵分解为多个向量分别与X\Y一一对应,在图像中分别画出其对应图线。

X=[1 2 3 4 5 6 7 8];    %X为向量
Y=[8 7 6 5 4 3 2 1;7 6 5 4 3 2 1 0; 6 5 4 3 2 1 0 -1];   %Y为三行八列的矩阵
plot(X,Y);

 (画出来的效果如上)

       

         2.plot(X1,Y1, X2,Y2, .....,Xn,Yn)

        Matlab支持多函数同时画图,且在同一画布上展现,效果不多赘述。

        

        3.plot(X,Y,S)

在Matlab中可以自定义其图像样式,根据自己的风格或者论文的要求可以切换多种线与坐标的样式。下面概括出一些常用的定义符。(注意黑色的简写不是b而是k)

        (1)线形、颜色定义符

线形及颜色符号表

定义符 - -- -.
线形 实线(Matlab默认) 划线 点线 点划线
定义符 r g b c
颜色 红色(red) 绿色(green) 蓝色(blue) 青色(cyan)
定义符 m y k w
颜色 品红(magenta) 黄色(yellow) 黑色(black) 白色(white)

        (2)标记类型定义符

标记类型定义符表

定义符 + o * . x
标记类型 加号 小圆圈 星号 实点 交叉号
定义符 d ^ v > <
标记类型 菱形(diamond) 向上三角形 向下三角形 向右三角形 向左三角形
定义符 s h p
标记类型 正方形(square) 正六角星(hexagon) 正五角星(pentagon)

        (3)指定标记大小及颜色

MarkerSize 标记大小,指定为正值
MarkerEdgeColor 标记轮廓颜色,指定为颜色名称或 RGB 三元组
MarkerFaceColor 标记内部颜色,指定为颜色名称或 RGB 三元组

例如像下列例子:

X=-pi:pi/10:pi;
Y= sin(X);
plot(X,Y,'--mv','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor',[0.4 0.6 0.7])
%'--mv'表示图像用划线表示,品红色,所在具体值用向下三角形表示
%后面的MarkerSize、MarkerEdgeColor、MarkerFaceColor分别表示标记符的大小、边框颜色、内容颜色

效果如下:(注意MarkerFaceColor若用RGB三元组表示的话各元素需要用空格隔开且可不用‘’(引号)包裹,但是若用颜色名称表示的话则需要‘’包裹,如‘g’)

        该部分需要读者多去实践观察其现象,可以对着上面的图标试一下具体效果。

二、坐标轴设置函数

        Matlab中的绘图常常与坐标轴有关,下列概括的是常用的坐标轴函数。

坐标轴设置函数

函数 功能
axis 设置横纵坐标轴的区间
xlable/ylable 添加横纵坐标轴的标注
legend 给坐标轴中的图形添加图例
text 在坐标轴中添加字符串
grid 添加网格
box 添加边框
xlim/ylim 设置横纵坐标区间

        1.axis可以用来设置横纵坐标轴的区间,添加不同的代码可以实现多种要求。(该行可不加‘;’)

           (1)       axis([xmin,xmax,ymin,ymax])

        控制在画布中的x/y轴的区间,在上知识点的代码基础上加上此行代码,其效果为:

(无论其要求的区间是否有值,画布都会画出)

axis([-5,10,-2,2])

         (2)      axis equal

        控制画布的呈现出来的图像横坐标与纵坐标的刻度值相等。

 (横纵坐标的刻度值皆为1)

         (3)      axis square

        控制画布的呈现出来的图像横纵坐标长度相等。(此时画布形状为正方形)

         (4)       axis auto

        系统默认样式(默认值),将画布就可能填满。

        2.xlim/ylim函数,可设置或者返回区间函数

         (1)      xlim  (ylim)

        返回横坐标区间,返回的是一个二维行向量  [min  max]

 

纵坐标方向也是如此方法。

         (2) xlim([xmin,xmax])   (ylim同理)

        用于设置横纵坐标的画布展示区间,与上述的axis([-5,10,-2,2])的方法类似,也不多赘述了

  

      3.legend函数

        在画布中的图形添加图示文字。

        (1)legend('str1第一个字符串',‘str2第二个字符串’,'str3第三个字符串'......)

        它会按照代码之前的画图顺序给每一个图像附近标上每一个字符串,因此顺序很重要。在这里补充一个知识点:当需要在一个画布中画出两条或以上曲线时,在每一次作图时需要在后面加上“hold on;”以让下一次画图仍保持在该画布上。

X=-pi:pi/10:pi;
Y1= sin(X);
Y2= cos(X);
plot(X,Y1,'--mv','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor',[0.4 0.6 0.7])
hold on;
plot(X,Y2,'--m^','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor',[0.4 0.6 0.7])
hold on;
legend('sinx','cosx')

        例如上述代码,legend内部的第一个字符串会去匹配第一条曲线即X-Y1,后面类似。运行的结果如下:

(图示若没有修改其位置则默认在右上角)

         (2)根据曲线图像需要修改图示位置时

        legend('str1第一个字符串',‘str2第二个字符串’,'str3第三个字符串'...,‘Location’,'direction')

        有时候由于图示在默认位置处遮挡住图像需要修改位置时,可以在后面加上location属性。

        其方向有

northwest north northeast
west east
southwest south southeast

        上述例子将legend函数改为“legend('sinx','cosx','Location','northwest')”,可以让函数分布更加规整好看。

        

         4.text函数        text(x,y,'string')

        text函数可以在坐标轴的制指定位置添加字符串,用以更直接对图像的解释。其坐标位置(x,y)与横纵坐标分布有关。

        以上述图像为例,若想在坐标轴(-3,0.3)处加上字符串“y=sinx”用以对图线的解释,则可以在原有代码上加上text函数,即

X=-pi:pi/10:pi;
Y1= sin(X);
Y2= cos(X);
plot(X,Y1,'--mv','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor',[0.4 0.6 0.7])
hold on;
plot(X,Y2,'--m^','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor',[0.4 0.6 0.7])
hold on;
legend('sinx','cosx','Location','northwest')
text(-3,0.3,'y=sinx')

效果如下:

 5.label函数        xlabel/ylabel

        label函数用于给横纵坐标添加标注,调用形式为xlabel('str1')或者ylabel('str2'),实现比较简单不过多叙述了。

三、分贴小结

        由于知识点过多一个帖子分享篇幅较大,因此打算多写一个帖子分享后面关于画图的知识点,若有需要继续学习的可以找后面的帖子研究一下。若有什么问题可以在评论区留言,或者私聊我,我会力所能及的帮助一同学习的人。大家一同进步吧!

猜你喜欢

转载自blog.csdn.net/FSHznb/article/details/131557913