【图形绘制流程】
- 数据准备:产生采样自变量,计算相应函数值向量
- 选定图形窗口与子图
- 调用绘图函数
- 设置坐标轴、刻度、网格
- 设置线性、标记类型、粗细
- 添加图名、坐标名、图例
- 导出
【画布与子图】
子图
matlab 中,画布默认从 figure1 开始,导出的图形依次为:figure.1、figure.2…
因此一般画图时,直接利用 figure 新建画布即可
1 | >> figure %新建画布 |
若绘制了多个画布,想在不同的画布间进行切换时,利用 figure(k) 即可完成画布切换
1 | >> figure(2) % 切换到画布2 |
子图
matlab 允许在同一画布下绘制多幅相互独立的子图,利用 subplot() 命令即可设置子图大小并切换绘制域
调用格式:subplot(n,m,k) 将画布分为 nm 大小,选中第 k 个*(行优先排序)作为当前绘制域
在调用 subplot() 后,所有的操作均在当前绘制域内完成,若想切换绘制域,再次调用 subplot() 即可
需要说明的是,在使用 subplot() 后,若想再绘制充满整个图形窗的图形时,利用 clf 命令进行清空即可
1 | >> figure |
实例:
1 | >> figure |

【二维图形】
散点图与曲线图
基本使用
利用 plot() 函数即可完成散点图和连线图的绘制:
plot(x,y):以 x 为横坐标,y 为纵坐标,有序绘制曲线
1 | >> figure |

plot(x,y,'o'):以 x 为横坐标,y 为纵坐标,有序绘制散点图
1 | >> figure |

plot(y):以 1:n 为横坐标,y 为纵坐标,有序绘制曲线,其中 n 是数组 y 的长度
1 | >> figure |

plot(z):以横轴为实轴,纵轴为虚轴,在复平面上绘制有序集合
1 | >> figure |

线型、标记、颜色
用法:plot(x,y,'str'):
颜色:在绘制多个图形时,matlab 会自动分配颜色,但如果对分配的颜色不满意,可以自己指定
| str | 颜色 |
|---|---|
| r | 红色 |
| m | 粉红 |
| g | 绿色 |
| c | 青色 |
| y | 黄色 |
| k | 黑色 |
线型
| str | 线型 |
|---|---|
| ‘-‘ | 实线 |
| ‘—‘ | 虚线 |
| ‘:’ | 点线 |
| ‘-.’ | 点划线 |
标记点
| str | 标记 | str | 标记 |
|---|---|---|---|
| . | 点 | s | 正方形 |
| ^ | 上三角 | > | 右三角 |
| v | 下三角 | < | 左三角 |
| + | +号 | p | 五角星 |
| * | 星号 | h | 六角星 |
| d | 菱形 | o | 空心圆 |
注:选项可以连在一起用,如:-.g表示绘制绿色的点划线,g+ 表示用绿色的 + 号绘制曲线
例如:plot(x,y,'+-r'):将散点图的每个点的大小指定为 n
1 | >> figure |

线型粗细
plot(x,y,'o','MarkerSize',n):将散点图的每个点的大小指定为 n
1 | >> figure |

plot(x,y,'LineSize',n):将曲线图的线的大小指定为 n
1 | >> figure |

散点曲线图的颜色
当绘制散点与曲线的叠加时,有时希望将空心圆的散点填充,并使得两种颜色不同
例如:plot(x,y,'-ok','MarkerFaceColor','r')
1 | >> figure |

栅格
有时想要对当前图形开启栅格,可以利用 grid 命令
grid on:开启栅格grid off:关闭栅格grid:在开启/关闭间切换
1 | >> figure |

图形叠绘
当有时需要在一张图形上画多个图形时,可利用 hold 命令来开启/关闭图形叠绘
hold on:开启图形叠绘hold off:关闭图形叠绘hold:在图形叠绘开启/关闭中切换
1 | >> figure |

3.2 散点图
scatter(x,y):以 x、y 为坐标绘制散点图
scatter(x,y,'fill'):以 x、y 为坐标绘制散点图,并将散点填充
1 | >> figure |

【柱状图】
matlab 中利用 bar() 来绘制柱状图,用垂直条形以表示向量或矩阵中的值
bar(x):x 为向量时,为 x 中每一个元素画出柱状图;x 为矩阵时,将其分解为几个行向量,来画出柱状图bar(x,y):以严格单增的 x 向量为横坐标,将矩阵 y 分解成行向量,在指定的横坐标处画出,要求 x 的长度与 y 的行数相同bar(x,'stacked'):以累计式绘出柱状图图bar(x,'grouped'):以分组式绘出柱状图
1 | >> figure |

饼图
matlab 中利用 pie() 来绘制饼图,pie3() 来绘制 3D 饼图
pie(x):绘制参数为 x 的饼图pie(x,pos):绘制参数为 x 的饼图,pos 为与 x 同维的矩阵,若其中有非 0 元素,则对应的扇区向外移一些pie3(x):绘制参数为 x 的 3D 饼图pie3(x,pos):绘制参数为 x 的 3D 饼图,pos 为与 x 同维的矩阵,若其中有非 0 元素,则对应的扇区向外移一些
1 | >> figure |

频数直方图
matlab 中利用 hist() 绘制二维条形直方图
hist(y):将 y 中元素放在等距的 10 个条形中,且返回每个条形中的元素个数,当 y 为矩阵时,按列进行分解处理hist(y,x):以向量 x 为横轴,将 y 中元素放到 length(x) 个由 x 中元素指定的位置为中心的条形中
1 | >> subplot(2,2,1) |

【三维图形】
曲线图
在二维平面上,绘制曲线利用 plot() 函数,而在三维空间中,绘制曲线利用 plot3() 函数,该函数与 plot() 用法类似
plot3(X,Y,Z)- X、Y、Z 为同维向量时,绘制以 X、Y、Z 为 x、y、z 坐标的三维曲线
- X、Y、Z 为同维矩阵时,绘制以 X、Y、Z 的对应列元素为 x、y、z 坐标的三维曲线
plot3(X1,Y1,Z1,X2,Y2,Z2):绘制以 X1、Y1、Z1 和 X2、Y2、Z2 为 x、y、z 坐标的三维曲线
注:关于线型、标记、颜色等,见 3.二维图形
1 | >> figure |

网格图
对于函数 $z=f(x,y)$ 其三维网格图绘制过程如下:
- 确定自变量 x、y 的取值范围:
x=x1:dx:x2,y=y1:dy:y2 - 构成 xoy 平面上的自变量采样格点矩阵:
- 利用格点矩阵原理生成:
X=ones(size(y))*x,Y=y*ones(size(x)) - 利用
meshgrid()函数生成:[X,Y]=meshgrid(x,y)
- 利用格点矩阵原理生成:
- 计算自变量采样格点上的函数值 $Z=f(x,y)$
- 利用
mesh()函数绘图mesh(X,Y,Z):以向量 X、Y 和矩阵 Z 绘制网格图mesh(Z):以矩阵 Z 的列下标为 x 轴自变量,行下标为 y 轴自变量绘制网格图
注:关于线型、标记、颜色等,见 3.二维图形
1 | >> figure |

曲面图
对于函数 $z=f(x,y)$ 其三维曲面图与上述 4.2 网格图的绘制 相似,唯一的不同在于,网格图的绘制利用的是 mesh() 函数,而曲面图的绘制利用的是 surf() 函数
surf(X,Y,Z):以向量 X、Y 和矩阵 Z 绘制曲面图surf(Z):以矩阵 Z 的列下标为 x 轴自变量,行下标为 y 轴自变量绘制曲面图
1 | >> figure |

光照图
在某些情况下,光照图能使图形表面差异更容易看到,其一般与曲面图组合使用
在 matlab 中,利用 camlight 等命令来设置光照
camlight left:设置光源在左侧camlight rightt:设置光源在右侧lighting phong:细化表面,使得光照效果更加平滑
在设置光照后,有时视角并不好,可以利用 view(a,b) 来改变视角,其中 a 代表方位角,b 代表仰角
1 | >> figure |

等值图
等值图即等高线图,在 matlab 中利用 contour() 命令即可完成绘制:
contour(X,Y,Z):以向量 X、Y 和矩阵 Z 绘制等值图contour(Z):以矩阵 Z 的列下标为 x 轴自变量,行下标为 y 轴自变量绘制等值图contour(X,Y,Z,n):以向量 X、Y 和矩阵 Z 绘制等值图,n 为等值线条数contour(Z,n):以矩阵 Z 的列下标为 x 轴自变量,行下标为 y 轴自变量绘制等值图,n 为等值线条数contour(Z,v):以矩阵 Z 的列下标为 x 轴自变量,行下标为 y 轴自变量绘制等值图,v 为向量,向量长度为等值线条数,值为对应元素值
1 | >> figure |

【四维图形】
囿于人类的局限性,对于四维图形难以想象,但在 matlab 中,可以用颜色来代表第四维,从而绘制四维图形
用 mesh() 和 surf() 绘制的图形,未给出颜色参数的情况下,其是沿着 z 轴变化的,但由于 z 轴已经存在,其不能提供新的信息,因此考虑利用颜色来描绘不受 3 个轴影响的某些属性。
1 | >> figure |

【文字说明】
无论何种图形,均需要文字说明,图形窗口中常见的文字说明有:标题、坐标轴名、图例
标题与坐标轴名
title(str,'FontSize',num):图片标题设为 str,字体大小为 num,默认为 11xlabel(str,'FontSize',num):x 坐标轴名设为 str,字体大小为 num,默认为 11ylabel(str,'FontSize',num):y 坐标轴名设为 str,字体大小为 num,默认为 11zlabel(str,'FontSize',num):z 坐标轴名设为 str,字体大小为 num,默认为 11
1 | >> figure |

图例
在 matlab 中,生成的图例利用 legend() 函数,其与绘制的图形一一对应,并且默认处于右上角位置
legend(str1,str2,...):依次生成图例 str1、str2、…、strnlegend(str1,str2,...,strn,'Location',pos):依次生成图例 str1、str2、…、strn,并将图例至于 pos 位置legend off:关闭图例
关于 str 的说明:当需要在图例中输出下标、希腊字母等特殊符号时,利用 latex 语法即可
关于 pos 的说明:
| 参数字符串 | 含 义 | 参数字符串 | 含 义 |
|---|---|---|---|
| North | 放置在图形的最上端 | NorthEast | 放置在图形的右上角,默认位置 |
| South | 放置在图形的最下端 | NorthWest | 放置在图形的左上角 |
| East | 放置在图形的最右端 | SouthEast | 放置在图形的右下角 |
| West | 放置在图形的最左端 | SouthWest | 放置在图形的左下角 |
| NorthOutside | 放置在图形外的最上端 | NorthEastOutside | 放置在图形外的右上角 |
| SouthOutsi | 放置在图形外的最下端 | NorthWestOutside | 放置在图形外的左上角 |
| EastOutside | 放置在图形外的最右端 | SouthEastOutside | 放置在图形外的右下角 |
| WestOutside | 放置在图形外的最左端 | SouthWestOutside | 放置在图形外的左下角 |
1 | >> figure |

【坐标轴】
有时需要对坐标轴范围进行调整,可利用以下函数:
xlim([a,b]):查看 x 轴的范围ylim([a,b]):查看 y 轴的范围zlim([a,b]):查看 z 轴的范围set(gca,'xtick',[a:step:b]):调整的 x 轴的刻度范围set(gca,'ytick',[a:step:b]):调整的 y 轴的刻度范围set(gca,'ztick',[a:step:b]):调整的 z 轴的刻度范围axis auto:采取坐标轴默认设置asis on:打开坐标轴标签asis off:关闭坐标轴标签
注:
- 在设置刻度时,可以一并将坐标轴的范围改变:
set(gca,'xlim',[a,b],'xtick',[a:step:b]) - 对于柱状图来说,想改变其 x 轴下标,利用
set(gca,xtick',[a,b,c,...])即可
1 | >> figure |

【其他】
鼠标交互
matlab 中提供了允许鼠标与图形交互的指令:ginput、gtext、zoom
除了 ginput 只能用于二维图形外,其他两个适用于所有图形
在二维图形中,一般将 ginput 与 zoom 混合使用,以得到较为准确的数据
[x,y]=ginput(n):用鼠标从二维图形中获得 n 个点的数据坐标。在该命令执行后,会将图像调到前台,光标变为十字,通过移动鼠标来定位,通过点击来获取数据,待取完 n 个点后,图形会自动切回后台
| 运行效果 | 运行结果 |
|---|---|
![]() |
![]() |
gtext(str):用鼠标将字符串或元胞字符数组放置到图形中,作为文字说明。在该命令执行后,会将图像调到前台,光标变为十字,通过使用鼠标定位,定位到待放置区域后,右击即可完成放置
| 运行效果 | 运行结果 |
|---|---|
![]() |
![]() |
zoom:用于设定图形缩放zoom xon:规定当前图形的 x 轴可进行缩放zoom yon:规定当前图形的 y 轴可进行缩放zoom on:规定当前图形可进行缩放zoom off:规定当前图形不可进行缩放zoom out:返回图形初始状态
特殊坐标轴
双坐标轴
有时需要将同一自变量不同的两个量纲的变化绘制到同一张图上,此时就需要双坐标轴
plotyy(X1,Y1,X2,Y2):以左右不同的纵轴分布绘制 X1-Y1 和 X2-Y2 两条曲线
1 | >> figure |

极坐标
利用 polar() 函数可完成极坐标图的绘制
polar(theta,rho):以 theta 为极角,以 rho 为极径绘制极坐标图形
1 | >> figure |

对数坐标
除笛卡尔坐标系、极坐标系外,还有对数坐标系,其可以将处于低次幂的数据清晰显示出来
semilogx(X,Y):以 X 和 Y 在对数坐标系上来绘制图形,x 轴为对数制,y 轴仍为笛卡尔制loglog(X,Y):以 X 和 Y 在对数坐标系上来绘制图形,x 轴、y 轴均为对数制
1 | >> figure |

表达式绘制
函数随着自变量的变化趋势是未知的,如果自变量的离散区间不合理,则无法准确地反应函数的变化趋势
plot() 函数自变量的趋势即是我们所给定的,但有时我们给定的离散区间往往不那么合理,此时可以利用 fplot() 函数,其通过自适应算法,来给出离散区间
fplot(Fun,[a,b]):在区间 [a,b] 内,绘制函数 Fun 的图形fplot(Fun,[a,b],tol):在区间 [a,b] 内,绘制函数 Fun 的图形,tol 为相对误差允许范围,默认为 1E6fplot(Fun,[xmin,xmax],[ymin,ymax]):在二维区间 [xmin,xmax]、[ymin,ymax] 内,绘制函数 Fun 的图形fplot(Fun,[xmin,xmax],[ymin,ymax],tol):在二维区间 [xmin,xmax]、[ymin,ymax] 内,绘制函数 Fun 的图形,tol 为相对误差允许范围,默认为 1E6
1 | >> figure |




