Matlab系列之二维图形(上)

简要

上一篇已经对图形的属性有过介绍,在此基础上来进行二维以及后续三维图形的操作(注:没接触过其他维度的操作,就不折腾相关的内容了),将会更容易理解这些属性的用法,当然,全部的属性使用都来一遍,感觉就不太实际了,大可不必~

简单说下本篇会涉及的内容,常见的plot使用肯定是要有的,然后就是对图形做一些操作,显得更灵活一点,毕竟软件这么强大,不能只局限于画简简单单的图形,此外还有就是一些比较特殊的二维图,比如直方图,柱状图之类的,具体还有啥,慢慢往下看~

绘制基础

这一段的内容,本来是上一篇想写进去的,不过感觉前后有点不协调,就留到本篇来写了,主要作用就是理解图形的形成机制,和上篇的属性啥的关联不是太大。

要知道,MATLAB是没法真正绘制连续图形的,都是通过”打点“的方式进行绘制,因此要有个离散的概念,比如离散函数y=f(x),然后x的标量数组[x1,x2,x3,…,xn]则对应着y的值[y1,y2,y3,…,yn],然后这两个数组在直角坐标系中以点序列的形式表示,于是就形成了离散的图形,而连续图形的表示则是把离散区间进行细化,逼近连续的形式,在视觉上呈现连续的效果,画图的时候,每两个离散点用线进行连接,则可表示出该函数的连续特性,所以在进行操作图形的时候,要记住点与点之间是对应的,假如x或y缺了点,另一部分就相当于越界了,然后无法对应即绘制失败。

看接下来的两个示例,就可以清楚MATLAB中的连续和离散了

%示例1 离散
x=0:12;%自变量
y=sin(x);%x的对应点
plot(x,y,'r*','markersize',20)%对点进行标记
grid on%开启网格显示

示例1运行结果

image-20210210213136373

%示例2 连续
x=0:0.01:12
y=sin(x);%x的对应点
plot(x,y,'r*','markersize',20)%对点进行标记
grid on%开启网格显示

示例2运行结果

image-20210210213210365

再补充下完整绘图的几个步骤,大致如下:

1)、准备数据,二维图形就是准备横坐标和纵坐标的数据,三维图形则需要准备矩形参变量和Z轴数据

2)、指定图形窗口和子图位置,可以使用figure命令指定图形窗口,默认是打开Figure1,subplot就可以指定子图的位置,如果像上述那样直接进行了plot,则是默认使用Figure1的窗口

3)、绘图,根据数据绘制曲线或曲面图,可对绘制方式进行设置,如:色彩、线型、数据点标记等

4)、注释,可以设置坐标轴的坐标范围、刻度等,还能对图形进行注释,如:图名、图例、文字说明等

5)、保存图片,可以将绘制的图形保存为.fig后缀的文件,也可转换为其他格式的图形文件

以上几个步骤是相对详细的绘图步骤,一般情况下,只进行了步骤1~3,其余的都是使用的默认设置。

plot

plot是最基本的一个二维图形绘制的函数,输入plot(a,b)就可以画出一个分别以a、b为x轴和y轴的图形,基本的调用格式有以下的几种,即:

plot(x)
plot(x,y)
plot(x1,y1,x2,y2,..)

plot(x)中的x可以是向量、实数矩阵或者复数矩阵,若x为实向量,则以x的值为纵坐标,各值对应的下标则为横坐标,最后以直线连接各点;若x是复数向量,则实部为横坐标,虚部为纵坐标,然后各点以直线进行顺序连接;若x是个实数矩阵,则按列绘制每列元素值相对其下标的连线图,且同时绘制多条,条数即矩阵列数;若x是个复数矩阵,则分别以x实部矩阵和虚部矩阵的对应元素为横纵坐标绘制多条连线图。

plot(x,y)就要直观一些了,x和y是同维度的向量,以x、y分别为横纵坐标,将相对应的元素值进行连线;若x是个向量,而y是个与x等维度的矩阵,那么绘制出多条曲线,线条数即y矩阵的另一个维数(非与x的相同维数),如果x和y都是矩阵,且等维度,则以x、y对应列元素为横纵坐标进行绘制,曲线条数为矩阵行数。

plot(x1,y1,x2,y2,…)就跟plot(x,y)相同了,只是多了元素对,且不同元素对之间不存在约束关系,相对比较独立,只是在同一个figure里进行显示。

接下来用plot进行一些使用操作:

%1 绘制多条曲线
clear all
close all
clc
x=0:0.05:5;%x坐标
y1=0.1*x-0.5;%y1坐标
y2=sin(x.^2);%y2坐标
figure
plot(x,y1,x,y2)

结果

image-20210210213237841

%2 变量为矩阵时的图例
clear all
close all
clc
x=0:pi/180:2*pi;
y1=sin(x);
y2=sin(2*x);
y3=sin(3*x);
X=[x;x;x]';
Y=[y1;y2;y3]';
plot(X,Y,x,cos(x))

结果

image-20210210213248310

%3 含y坐标变量的锯齿波
y=[1 0 1 0 1 0];
plot(y)

结果

image-20210210213300613

%4 正弦波
x=0:0.01:10;
y=sin(x);
plot(x,y)

结果

image-20210210213317057

%5 绘制双矩阵
x=[1 2 3;4 5 6;7 8 9];
y=[3 2 1;6 5 4;9 8 7];
plot(x,y)

结果

image-20210210213342617

文字标注

一般情况下,我们都会给绘制的图形添加文字标注,主要的标注方式有以下几种,其中所述的属性名和属性值就是上篇的绘图基础所涉及的。

(1) 添加图形标题

使用title命令,使用格式有两种,即:

title('string')%在坐标系顶部添加一个文本串即string作为该图形标题
title('text','属性名','属性值','...')%设置标题名的属性,可以是字体大小、字体名以及字体的粗细等

(2)添加坐标轴标注

使用xlabel、ylabel、zlabel,分别对应x、y、z三个轴,使用方法相同,以xlabel为例表述

xlabel('text')%给当前坐标系中的x轴添加文本标注,即此处的“text”
xlabel('text','属性名','属性值','...')%设置坐标轴标注文本的属性,可以是字体大小、字体名以及字体的粗细等

(3)图例

使用legend函数进行设置

legend(str1,str2,str3,...)%在当前图中添加多个图例
legend off %关闭当前坐标图上的图例

(4)文本注释

使用text函数在二维和三维图形的指定位置进行文本注释,gtext函数可设置文本注释可拖动,即通过鼠标移动,单击后来确定标注的位置。

text(x,y,'string');%在二维图的(x,y)的位置标注'string'
text(x,y,z,'string');%在三维图的(x,y,z)的位置标注'string'
gtext('string')%使用鼠标移动从而确定‘string’的标注位置

示例

程序

x=0:pi/50:2*pi;
y1=sin(x);
y2=cos(x);
figure(1);plot(x,y1,'k-*',x,y2,'b-o');%创建图形窗口,并对显示图形
grid on;%打开栅格
legend('sin(\alpha)','cos(\alpha)');%添加2个图例
text(pi,0,'\leftarrow sin(\alpha)');%(pi,0)的位置添加文本注释
gtext('cos(\alpha)\rightarrow');%cos曲线的文本注释,由使用者通过鼠标移动,单击后确定放置位置
title('sin(\alpha) & cos(\alpha)');%添加标题
xlabel('\alpha');%添加x轴标注
ylabel('value')%添加y轴标注

结果

image-20210210213752999

线型、点型和颜色

这三个词对应的就是使用plot函数进行绘制图形时,对图形的控制,你想要怎样线型或者点型的图,颜色又想要怎样的,这些都很适用,为了方便理解和使用,将这些标识符以表格形式进行展示:

颜色标识符符号标识符线型标识符
r.-实线
g绿o圆圈:点线
bxx号-.点划线
c++号虚线
m品红*星号
ys平方号
kd钻石
v三角符号(向下)
^三角符号(向上)
<三角符号(向左)
>三角符号(向右)
p五角星
h六角星

之前用plot的时候也已经用过很多次了,这边再简单用几个标识展示下

x=0:0.1:10;
y1=sin(x);
y2=cos(x);
plot(x,y1,'d-',x,y2,'hc--')

结果

image-20210210214256377

坐标轴设置

在绘图的时候,如果没有对坐标轴进行设置,MATLAB将使用默认模式,即直角坐标系,并自动标记刻度,如果有特定的需要,则可以对坐标轴进行设置,可以设置坐标比例、坐标边界范围以及坐标轴的形式。

坐标轴的控制指令是axis以及axis+控制指令,下方列出一些常用命令及其含义;

命令含义
axis([xmin,xmax,ymin,ymax])设定坐标范围,需满足xmin<xmax,ymin<ymax,可取inf或-inf
axis auto使用默认设置
axis manual使当前坐标范围不变,之后的图形都在当前坐标范围显示
axis fill在manual方式下起作用,使坐标充满整个绘图区域
axis vis3d保持高宽不变,三维旋转时,避免图形的大小变化
axis ij矩阵式坐标,原点在左上方
axis xy普通直角坐标系,原点在左下方
axis equal横、纵坐标采用等长刻度
axis on使用轴背景
axis off取消轴背景
axis tight把数据范围直接设置为坐标范围
axis square使得坐标系为方形
axis normal默认矩形坐标系
axis image横纵轴采用等长的刻度,且坐标框紧贴数据范围

示例

%1 使用默认设置的坐标轴
z=0:0.1:2*pi;
x=sin(z);
y=cos(z);
plot(x,y);
axis auto

结果1

image-20210210214314443

%2 使用坐标轴为方形
z=0:0.1:2*pi;
x=sin(z);
y=cos(z);
plot(x,y);
axis square

结果2

image-20210210214334524

%3 设定坐标轴范围
z=0:0.1:2*pi;
x=sin(z);
y=cos(z);
plot(x,y);
axis([-2 2 -2 2])

结果3

image-20210210214348013

%4 设定坐标轴范围且关闭背景
z=0:0.1:2*pi;
x=sin(z);
y=cos(z);
plot(x,y);
axis([-2 2 -2 2]);
axis off

结果4

image-20210210214440461

图形叠加绘制

在很多时候,我们会在一张已有曲线的图形上再绘制一条或多条曲线,从而对各种曲线的关系进行对比分析等,因此在MATLAB中提供了hold命令实现该种功能;

hold on%使得当前轴以及图形保持而不被刷新掉,然后在此图中绘制新图
hold off%使得当前轴以及图形具备刷新的性质,即新图替换旧图
hold %直接相当于on和off的双向切换

示例

%绘制离散信号通过零阶保持器后的波形
t=2*pi*(0:20)/20;
y=cos(t).*exp(-0.4*t);
stem(t,y,'g');
hold on;
stairs(t,y,'r');
hold off;

结果

image-20210210214654488

子图绘制

子图很常见,就是在一个窗口里布置多个独立的图形,使用subplot函数

subplot(m,n,k)%图形窗口中将有(m x n)幅子图,k是当前子图的编号,编号从左到右,从上到下增加
subplot('position',[left bottom width height])%在指定位置开辟一定宽高的子图,并设为当前图,其中[left bottom width height]为设置值,取值范围[0~1],左下角为(0,0)坐标位置

注:由于子图是独立的,因此所有的绘图指令都可以在子图中使用;若使用subplot后,想要重新在整个窗口绘图,则可使用“clf”命令清除已绘图形再进行绘制,当然直接用close,然后重新创建也可。

示例

%例1
t=(pi*(0:1000)/1000)';
y11=sin(t);
y22=sin(5*t);
y12=y11.*y22;
y21=cos(t);
subplot(221);plot(t,y11);axis([0,pi,-1,1]);
subplot(222);plot(t,y12);axis([0,pi,-1,1]);
subplot(223);plot(t,y21);axis([0,pi,-1,1]);
subplot(224);plot(t,y22);axis([0,pi,-1,1]);

结果1

image-20210210215257527

%例2
t=(pi*(0:1000)/1000)';
y11=sin(t);
y22=sin(5*t);
y12=y11.*y22;
y21=cos(t);
subplot('position',[0.1 0.5 0.35 0.35]);plot(t,y11);axis([0,pi,-1,1]);
subplot('position',[0.5 0.5 0.35 0.35]);plot(t,y12);axis([0,pi,-1,1]);
subplot('position',[0.1 0.1 0.35 0.35]);plot(t,y21);axis([0,pi,-1,1]);
subplot('position',[0.5 0.1 0.35 0.35]);plot(t,y22);axis([0,pi,-1,1]);

结果2

image-20210210215319497


更多精彩,等你发现~


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值