【笔记】MATLAB中的图形(1)
绘图命令plot绘制x-y坐标图;loglog命令绘制对数坐标图;semilogx和semilogy命令绘制半对数坐标图;polor命令绘制极坐标图。
1、基本形式
如果y是一个向量,那么plot(y)绘制一个y中元素的线性图。假设我们希望画出
y=[0.,0.48,0.84,1.,0.91,6.14]
则用命令plot(y)。它相当于命令plot(x,y),其中x=[1,2,...,n]或x=[1;2;...;n],即向量y的下标编号n为它的长度。
MATLAB会产生一个图形窗口,显示如图1所示,请注意:坐标x和y是由计算机自动生成的。
上面的图形没有加上x轴和y轴的标注,也没有标题。用xlabel,ylabel,title命令可以加上。
title | 图形标题 |
xlabel | x坐标轴标注 |
ylabel | y坐标轴标注 |
text | 标注数据点 |
grid | 给图形加上网络 |
hold | 保持图形窗口的图形 |
如果x、y是同样长度的向量,plot(x,y)命令可画出相应的x元素与y元素的x-y坐标图。
例如:
>> plot(y)
>> x=0:0.05:4*pi;
>> y=sin(x);
>> plot(x,y)
>> grid on,title('y=sin(x)曲线图')
>> xlabel('x=0:0.05:4pi')
结果见图2。
2、多重线
在一个单线图上,绘制多重线有三种方法.
第一种方法是利用plot的多变量方式绘制:
plot(x1,y1,x2,y2,…,xn,yn)
x1,y1,x2,y2,…,xn,yn是成对的向量,每一对x,y在图上产生如上方式的单线。多变量方式绘图允许不同长度的向量显示在同一图形上。
第二种方法也是利用plot绘制,但加上hold on/off命令的配合:
plot(x1,y1)
hold on
plot(x2,y2)
hold of
第三种方法还是利用plot绘制,但带入矩阵。
如果plot用于两个变量plot(x,y),并且x,y是矩阵,则有以下情况:
(1) 如果y是矩阵,x是向量,plot(x,y)用不同的画线形式绘出y的行或列及相应的x向量,y的行货列的方向与x向量元素的值选择是相同的。
(2) 如果x是矩阵,y是向量,则除了x向量的线族及相应的y向量外,以上的规则也适用。
(3) 如果x,y是同样大小的矩阵,plot(x,y)绘制x的列及y相应的列。
3、线型和颜色的控制
线型、点标记和颜色的取值有以下几种(表 2)。
线型 | 点标记 | 颜色 | 线型 | 点标记 | 颜色 |
- 实线 | . 点 | y 黄色 | ^ 朝上三角 | k 黑色 | |
: 虚线 | o 小圆圈 | m 棕色 | v 朝下三角 | ||
-. 点画线 | x 叉字符 | c 青色 | > 朝右三角 | ||
-- 间断点 | + 加号 | r 红色 | < 朝左三角 | ||
* 星号 | g 绿色 | p 五角星 | |||
s 方格 | b 蓝色 | h 六角形 | |||
d 棱形 | w 白色 |
如果不指定画线方式和颜色,MATLAB会自动为您选择点的表示方式及颜色。你也可以用不同的符号指定不同的曲线绘制方式。
例如:
>> t=-3.14:0.2:3.14;
>> x=sin(t);y=cos(t);
>> plot(t,x,'+r',t,y,'-b')
4、 对数图、极坐标图及条形图
Loglog、semilogx、semilogy和polar等的用法和plot相似。这些命令允许数据在不同的graph paper上绘制,例如不同的坐标系统。先介绍的fplot是扩展来的可用于符号作图的函数。
(1)、fplot(fname,lims)绘制fname指定的函数的图形。
(2)、polar(theta,rho)使用相角theta为极坐标形式绘图,相应半径为rho,其次可使用grid命令画出极坐标网格。
(3)、loglog用log10-log10标度绘图。
(4)、semilogx用半对数坐标绘图,x轴是log10,y是线性的。
(5)、semilogy用半对数坐标绘图,y轴是log10,x是线性的。
(6)、bar(x)显示x向量元素的条形图,bar不接受多变量。
(7)、hist绘制统计频率直方图。
(8)、histfit(data,nbins)绘制统计直方图与其正态分布拟合曲线。
fplot函数的绘图区域为lims=[xmin,xmax],也可以用lims=[xmin,xmax,ymin,ymax]指定y轴的区域。函数表达式可以是一个函数名,如sin,tan等;也可以是带上参数x的函数表达式,如sina(x),diric(x,10);也可以是一个用方括号括起来的函数组,如[sin cos]。
例:
>> fplot('sin',[0 4*pi])
>> fplot('sin(1./x)',[0.01,0.1])
>> fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi],'-o')
>> fplot('[sin(x),cos(x),tan(x)]',[-2*pi 2*pi -2*pi 2*pi])
下面介绍其他几个作图函数的应用:
例 1半对数坐标绘图:
>> t=0.001:0.002:20;
>> y=5+log(t)+t;
>> semilogx(t,y,'b')
>> hold on
>> semilogx(t,t+5,'r')
例 2 极坐标绘图:
>> t=0:0.01:2*pi;
>> polar(t,sin(6*t))
例 3 正态分布图:
可以用命令normrnd生成符合正态分布的随机数。
normrnd(u,v,m,n)
其中,u表示生成随机数的期望,v代表随机数的方差。
>> a=normrnd(10,2,10000,1);
>> histfit(a)
例 4:比较正态分布(a)与平均分布(b)的分布图:
>> %正态分布
>> yn=randn(30000,1);
>> x=min(yn):0.2:max(yn);
>> subplot(121)
>> hist(yn,x)
>> xlabel('(a)')
>> %平均分布
>> yu=rand(30000,1);
>> subplot(122)
>> hist(yu,25)
>> xlabel('(b)')
5、子图
在绘图过程中,经常要把几个图形在同一图形窗口中表现出来,而不是简单的叠加。这就用到函数sunplot。其调用格式如下:
subplot(m,n,p)
subplot函数把一个图形窗口分割成mxn个子区域,用户可以通过参数p调用各个子绘图区域进行操作。子绘图区域的编号为按行从左至右编号。
例 5:绘制字图
>> x=0:0.1*pi:2*pi;
>> subplot(2,2,1)
>> plot(x,sin(x),'-*');
>> title('sin(x)')
>> subplot(2,2,2)
>> plot(x,cos(x),'--o')
>> title('cos(x)')
>> subplot(2,2,3)
>> plot(x,sin(2*x),'-.*')
>> title('sin(2x)')
>> subplot(2,2,4)
>> plot(x,cos(3*x),':d')
>> title('cos(3x)')
得到的图形如图8所示:
6、填充图
利用二维绘图函数patch,可以绘制填充图。绘制填充图的另一个函数为fill。
下面的例子绘出了函数humps(一个MATLAB演示函数)在指定区域内的函数图形。
例 6:用函数patch绘制填充图
>> fplot('humps',[0,2],'b')
>> hold on
>> patch([0.5 0.5:0.02:1 1],[0 humps(0.5:0.02:1) 0],'r');
>> hold off
>> title('Aregion under an interesting function.')
>> grid
还可以用函数fill来绘制类似的填充图。
例 7:用函数fill绘制填充图
>> x=0:pi/60:2*pi;
>> y=sin(x);
>> x1=0:pi/60:1;
>> y1=sin(x1);
>> plot(x,y,'r')
>> hold on
>> fill([x1 1],[y1 0],'g')