MATLAB(5)绘图

       MATLAB图形绘制功能十分强大(毕竟绘图也是数据处理的一种),除了最基本的线图、直方图、饼图外,MATLAB还支持动态添加数据的动图以及通过像素点显示完整的图片,如下图所示。本文仅介绍最基本也是最常用的线图、动画等相关函数的使用,其它如曲面图、数据分布图可参考MATLAB绘图函数

在这里插入图片描述

线图

       线图,即描点画像,通过变量存储各个点的坐标后,通过函数plot(绘制二维图形)或plot3(绘制三维图形)连接各个点并显示在Figure界面上。当然,这只是最简单,最基础的部分,一般来说会添加其它内容,比如:

  1. 设置连接线的线型(实线、虚线、点线等)、颜色、数据点的标记符号:添加plot参数
  2. 设置 连接线的线宽及标记点的 大小、颜色:通过 Name,Value 对组指定
  3. 设置绘图位置:通过 figure、tiledlayout等设置
  4. 保持线图不被覆盖:hold on,此时继续绘图会重叠在原有的图上面。
  5. 为当前图窗设置标题、坐标轴:通过title、axis函数设置

当然,这些有的是各种图形通用的,比如3、4、5点。

MATLAB绘制图形是在当前图窗绘制的,包括设置线型、标题等都是。

plot

       plot函数用于绘制二维线图,基本格式如下面代码中的第1行所示,X和Y建议是一维数组,但如果是两个多维数组(必须维数相同,形成和列数相同数量的线条)或1个一维数组和1个多维数组也可以,但强烈建议一维数组,防止出现奇奇怪怪的情况。

       除了通过两个多维数组以一次性绘制多条曲线外,还可以如下面代码中的第2行所示,在一个图形内绘制n条线。(重复plot函数会导致之前的数据被覆盖,除非使用hold on

plot(X,Y)
plot(X1,Y1,X2,Y2,……,Xn,Yn)

       plot函数也可以只使用一个参数以创建线图:

plot(X)
%X为一维实数数组:横坐标为数据下标( 1 至 length(X)),纵坐标为数组对应值
%       虚数      横坐标为数组对应值的实数部分,纵坐标为数组对应值的虚数部分
%X为二维数组:绘制数量等于列数的线条,并以行号为横坐标,数组对应值为纵坐标
%       虚数                            数组对应值的实数部分,数组对应值的虚数部分纵

线型、线段颜色及标记

       线型、颜色及标记通过向plot添加一个字符串参数实现设置,如下所示,LineSpec为字符串,该字符串由分别代表线型、颜色及标记三种字符串构成,例如‘–’代表虚线,'r’代表颜色为红色,'x’代表标记为叉号,那么‘–rx’就是带有叉号标记的红色虚线,当然顺序不固定,'r–x’效果一致。

plot(X,Y,LineSpec)
plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2,……,Xn,Yn,LineSpecn)

       参考代码及对应图如下:

在这里插入图片描述
       线性、颜色、标记对应的字符串如下所示:

线型说明
-实线(默认)
虚线
:点线
-.点划线
标记说明
o圆圈
+加号
*星号
.
x叉号
s方形
d菱形
^上三角
v下三角
>右三角
<左三角
p五角形
h六角形
颜色说明
y黄色
m品红色
c青蓝色
r红色
g绿色
b蓝色
w白色
k黑色

线宽、标记点大小及颜色

       线宽、标记点大小及颜色的设置是通过向plot添加对应的Name(属性),Value (值)对组指定,如下所示。

plot(x,y,'--gs',...   %...是MATLAB用于连接两行语句,可以理解为和后面的换行符抵消,使两行 代码表示一个语句
    'LineWidth',2,...                 %Name为LineWidth,表示设置线宽
    'MarkerSize',10,...               %Name为MarkerSize,表示设置标记点大小
    'MarkerEdgeColor','b',...         %Name为MarkerEdgeColor,表示设置标记点边缘颜色,这里通过字符串设置
    'MarkerFaceColor',[0.2,0.5,0.3])  %Name为MarkerFaceColor,表示设置标记点中心颜色,这里通过0~1的RGB值设置

       对应产生的线图如下图所示。
在这里插入图片描述
       除了上述的Name外,还有其它属性,可参考Line属性

       除了在绘制时设置属性外,绘制完也可以修改线条的相应属性,如以下代码所示,在绘制时获取线条对象,并修改颜色为红色。

f = plot(x,y);
f.Color = 'r';

一般设置属性值的方式不止一种,如设置颜色为红色,除了使用颜色名称’red‘,还可以使用短名称’r‘,RGB三元组[1 0 0],或者十六进制颜色代码 ‘#FF0000’,具体方式可参考Line属性

绘图位置

figure函数
  1. 生成默认新图窗,并设置为当前窗口:figure
  2. 根据对应的Name(属性),Value (值)对组指定图窗属性:figure(Name Value)Figure属性

同样也可以通过f=figure()返回图窗对象,并通过f.Name进行属性设置。

  1. 将图窗对象f指定为当前图窗:figure(f)
  2. 将Number属性为n的图窗指定为当前图窗(若没有则新建后将其Number属性设为n):figure(n)
tiledlayout函数

tiledlayout函数在R2019b开始提供!更早期的可使用subplot函数。

       tiledlayout函数可用于设置分块图布局,即使多个图存在于同一个窗口内,通过tiledlayout(m,n)创建m行n列大小的分块图,通过nexttile函数选择其中一个图窗进行绘图。

  1. 选择下一个图窗作为当前图窗进行绘图:nexttile,如果刚通过tiledlayout函数创建则选择第一个。
  2. 选择第n个图窗作为当前图窗进行绘图:nexttile(n)
  3. 将第n个图窗及周围的line*col-1个图窗合并,并设置为当前图窗:nexttile(n,[line,col])
  4. 通过nexttile可返回相应的图窗对象,此后可以使用f.Name进行设置,相应属性和值可参考属性。其实通过tiledlayout函数返回的对象也可以,但设置的是所有的图窗。

标题

  1. 直接设置标题:title(字符串),将当前图窗的标题名称设置为字符串。
  2. 为分块图各个图窗设置标题:title(x,字符串),x为通过nexttile返回的图窗对象。(x=nexttile

plot3

       plot3函数用于绘制三维线图,与plot函数的使用一样,当然每个图对应坐标参数为3。

二维动图

创建动态线条对象:animatedline

  1. 创建没有数据的动态线条,为了方便添加数据,需要返回一个对象:D_Line=animatedline()
  2. 创建已包含相应数据的动态线条:D_Line=animatedline(x,y),x和y建议是同样大小的一维矩阵。(animatedline 在这里相当于集成了plot和plot3函数,坐标参数可以直接输入3个)
  3. 创建线条并设置相应线条属性:D_Line=animatedline(Name,Value)D_Line=animatedline(x,y,Name,Value)

向动态线条对象添加数据:addpoints

       addpoints用于向动态线条对象添加数据,格式为:addpoints(x,y),当然,也可以输入3个参数以绘制三维线条。

注意:似乎只有在创建时或通过D_Line.Name等才能进行属性设置,而不能边加点边设置属性,换言之,addpoints(h,x+9.4,y2,'color','r')是不行的,应该是因为addpoints函数无该参数。

更新图窗:drawnow

       事实上,通过addpoints添加数据后,在图窗即可绘制相应图像,而无法实现动图的效果,这是因为通过addpoints传入大量数据后,执行时线图会被一次性绘制,哪怕在循环中通过addpoints一次性加一个点,也没法,因为绘制速度太快,因此这里需要drawnow来更新图窗(副作用,也是实现动图的方法:降低显示速度(我猜的)),示例如下代码所示:

h = animatedline('Color','r');
axis([0 4*pi -1 1])
x = linspace(0,4*pi,2000);

for k = 1:length(x)
    y = sin(x(k));
    addpoints(h,x(k),y);
    drawnow
end

可以尝试去除倒数第2行的drawnow,对比效果。

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值