十、进阶绘图
10.1 Logarithm Plots
这里我们要讲的是画一些与对数(log)有关的图像,这里的log,既可以是图像是log,又可以是坐标轴是log,我们接下来用一个例子来说明
图10-1 示例1
我们首先看到第一个函数logspace(a,b,c),这个函数的作用与linspace()差不多,这个函数的作用是创建一个以10^a为起始,10^b为终止,中间被等分成c个的数据数组,所以x = [10^-1,10^1],那么y = [10^-2,10^2]
重点主要放在semilogx()、semilogy()、loglog()这三个函数上,他们的作用见下表
函数 | 作用 |
---|---|
semilogx | x轴为对数刻度,y轴为线性刻度 |
semilogy | x轴为线性刻度,y轴为对数刻度 |
loglog | x轴和y轴均为对数刻度 |
10.2 plotyy()
我们有时候在一张图上花了两条曲线,但是这两条曲线如果对应的y的值域不一样,那该怎么办呢?这里就有一个函数plotyy(),这个函数可以在一个图上做出两个y轴,下面给出示例
图10-2 plotyy函数
这里有一些比较陌生的知识,之前没讲到过,大家下去了解,我在这就不讲了,大家只需要掌握前四行代码即可
10.3 Histogram
先给出示例
图10-3 hist函数
首先是第一行的randn函数,这个函数的的作用是产生正态分布的随机数或矩阵,其调用格式为:randn(m,n),返回一个m*n的满足正态分布的矩阵,这里既然讲到了randn函数,下面我就给出个表,把与它类似的函数的用法都给出来
函数名 | 调用格式 | 说明 |
---|---|---|
rand | rand(m,n) | 生成m行n列的均匀分布在(0,1)之间的随机数 |
randn | rand(m,n) | 生成标准正态分布的随机数(均值为0,方差为1) |
randi | randi(max)randi(max,m,n) | 生成范围在(0,max)之间的一个随机数或矩阵 |
random | random(‘norm’,a,b,m,n) | 生成一个m行n列均值为a、标准差为b的的正态分布的随机数 |
讲完了randn函数,我们往下看,进入本节的主要函数hist,其调用格式为:his(y,nbins),将向量y等分到nbins个等间隔范围内,并返回每个范围内元素的个数
10.4 bar
matlab中bar函数的作用是绘制直方图,常用于统计或数据采集,它共有四种形式:bar、bar3、barh、bar3h,其中bar和bar3分别用来绘制二维和三维竖直方图,barh和bar3h分别用来绘制二维和三位水平直方图,其调用格式为:bar(x,y),其中x必须单调递增或递减,y为m*n的矩阵,产生的结果为m组,每组n个垂直柱。bar(...,’grouped’),使同一组直方条紧紧靠在一起。bar(...,’stack’),把同一组数据描述在一个直方条上,下面给出示例
图10-4 bar函数
10.5 Pie Charts
pie函数用于描绘圆饼图
10.5.1pie(x)
利用向量x中的数据描绘饼图
示例:
图10-5 pie函数
注意,x中的数据被看作频数,饼图中的比例:x[i]/sum(x),当x中所有元素的元素和sum(x)<1时,图形不是一个整圆,例如x = [0.1,0.2,0.3]时,得到
图10-6 示例2
10.5.2 pie(x,{‘...’,’...’,’...’})
x的意义同上,’...’是标注,示例:
图10-7 示例3
10.5.3 pie3
pie3用于描绘三维饼图,示例:
图10-8 pie3函数
10.6 Polar chart
polar可用于描绘极坐标图像,其调用格式为:polar(theta,rho);,其中theta是用弧度制表示的角度,rho是对应的半径,下面我们给出一个示例
图10-9 polar函数
10.7 stairs and stem charts
stairs和stem两个函数的用法与plot函数类似,只不过这两个,一个是画阶梯图,另个是画针状图,我以简单的sin函数为例,用这两个函数做出它的图像
图10-10 stairs and stem
10.8 errorbar
errorbar顾名思义,就是指有误差范围的,其调用格式为:errorbar(x,y,l,u),x是自变量,y是因变量,l是y的变动下限,u是y的变动上限,或者errorbar(x,y,e),e是y的变动绝对值,举个例子
图10-11 errorbar函数
10.9 fill
fil(x1,y1,选项1,x2,y2,选项2,······)按向量元素的下标渐增次序依次用直线段连接x,y对应元素定义的数据点。假如这样连线所得的折线不封闭,那MATLAB会自动将折线首尾连接起来,形成封闭多边形。然后在多边形内部涂满指定颜色,下面给出示例
图10-12 fill函数
10.10 plot3
三维曲线函数plot3,其调用格式为:plot(x,y,z,’style’);,x,y,z分别对应三个坐标轴,style可以是线的颜色,风格样式,下面给出示例
图10-13 plot3函数
10.11 meshgrid
我们上面讲的3d画图的方法是关于线的,那如果我们想画一个与能呈现出面的图,就要用到meshgrid函数,其调用格式为:[x,y] = meshgrid(x,y);由向量x和y生成二维数组,用来计算二元函数f(x,y)的值z=f(x,y)
10.11.1 三维网格图
mesh(x,y,z):绘制由数组X,Y,Z所确定的曲面网格图,X,Y,Z 都为二维数组时,要求它们的维数相同。X,Y 也可以是向量,但 Z 必须为二维数组, [m,n] = size(Z),此时必须满足:length(X) = n 且 length(Y) = m
mesh(z):相当于X = 1:n ,Y = 1:m,其中 [m,n] = size(Z)
mesh(...,C):二维数组C确定网格颜色,省略C时相当于 C=Z
mesh(...,'PropertyName',PropertyValue,...):设置属性值
示例:
图10-14 mesh函数
图10-15 hidden off
这里我多加了个hidden off,这个命令是使每个四边形区域不填充任何颜色,是空的,这样就可以看到后面的图像
meshz(X,Y,Z):调用方式与mesh相同,在mesh的基础上屏蔽边界面
示例:
图10-16 meshz函数
meshc(X,Y,Z):调用方式与mesh相同,在mesh的基础上增加等高线
示例:
图10-17 meshc函数
10.11.2 等值线图
contour是等高线绘制函数,其调用格式为:
contour(z),根据矩阵z画出等高线,z是以x,y为平面的高度,z必须是一个至少二维的矩阵,x,y轴的范围是[1,n]和[1,m],[m,n] = size(z)
contour(z,n),用n条水平线来绘制z的等高线
contour(z,v),是以向量v中的数据来绘制矩阵z的等高线,等高线的个数等于向量v的长度
示例:
图10-18 contour函数
10.11.3 三维表面图
surf(Z):相当于X = 1:n ,Y = 1:m,其中 [m,n] = size(Z)
surf(Z,C):二维数组C确定网格颜色,省略C时相当于 C=Z
surf(...,'PropertyName',PropertyValue):设置属性值
示例:
图10-19 surf函数
surfc(X,Y,Z):调用方式与surf相同,在surf的基础上增加等高线
示例:
图10-20 surfc函数
10.11.4 绘制一些常见的三维表面
(1)先根据x,y,z矩阵确定网格点
(2)用网格线连接在同一行中的网格点
(3)用网格线连接在同一列中的网格点
(4)用颜色数组C确定网格线(面)的颜色
1. 用surf()绘制四边形平面
绘图思路:把四个定点分成2行2列,将相应的坐标放进x,y,z矩阵即可,同理,对2n边形,可将2n个顶点分成2行n列或n行2列进行处理
示例:
图10-21 示例4
2. 用surf()绘制三角形平面
绘图思路:想象一下,有两个A点,只不过他们完全重合,这样就有四个顶点了,可以分成2行2列,将相应的坐标放进x,y,z矩阵即可绘制
示例:
图10-22 示例5
3. 绘制一个长方体表面图(共六个面)
图10-23 示例6
4. 一些特殊图形的绘制
图10-24 示例7
图10-25 示8
图10-26 示例9
图10-27 示例10
10.12 cylinder
matlab为我们提供了绘制柱面的函数cylinder,其调用格式为:
[x,y,z] = cylinder,返回半径为1、高度为1的圆柱面x,y,z轴的坐标值,圆柱面有20个距离相同的的点
[x,y,z] = cylinder(r),返回半径为r,高度为1的柱面的x,y,z轴的坐标值,柱面有20个距离相同的点
[x,y,z] = cylinder(r,n),返回半径为r,高度为1的柱面的x,y,z轴的坐标值,柱面有n个距离相同的点
示例:
图10-28 cylinder函数
10.13 sphere
matlab为我们提供了绘制球面的函数sphere,其调用格式为:
sphere,生成三位直角坐标系中的单位球体,该单位球体有20*20个面
sphere(n),在当前坐标系中画出有n*n个面的球体
示例:
图10-29 sphere函数
10.14 ellipsoid
matlab为我们提供了绘制椭球面的函数ellipsoid,其调用格式为:
[x,y,z] = ellipsoid(xc,yc,zc,a,b,c,n),返回绘图数据,x,y,z均为(n+1)*(n+1)的二维数组
[x,y,z] = ellipsoid(xc,yc,zc,a,b,c),返回绘图数据,n = 20
示例:
图10-30 ellipsoid函数