1 常用命令
hold on; % 持续绘图
hold off;
1.1 标注
xlabel('');
ylabel('');
title('');
axis([xmin, xmax, ymin, ymax]);
text(x, y, '') % 图内文字
% 在指定位置插入文字
% 这个命令会在图片窗口显示后生成一个会随鼠标移动的十字光标
% 需要移动光标来指定插入文字的位置
gtext('');
1.2 绘制多个子图
分成 r*c
个子窗口,p
为子窗口排位(自左向右,自上而下)
subplot(r, c, p)
1.3 图片保存
将当前窗口显示的图片保存至 'image/i.jpg'
print(gcf, '-djpeg', sprintf('image/%d.jpg',i))
1.4 更改图像色调
在绘图命令后输入以下代码:
colormap(hot);
更多色调模式以及自定义方式请参照官网说明
1.5 坐标轴控制
axis off; % 显示绘图而不显示坐标区背景
axis tight; % 将坐标轴范围设置为等于数据范围
axis ij; % 反转坐标系,这样 y 的值按从上到下的顺序逐渐增加
axis manual; % 将范围设置为手动,从而保留当前的坐标轴范围(不会随着之后
% 图像的添加而变化)
2. 二维绘图
plot(x, y, 'color_point_linestyle', 'linewidth', 2, 'markersize', 12);
'color_point_linestyle'
= 线型 + 线色 + 数据点 (例如 '--r*'
)
- 线型 (-, -., –, : )
- 线色 (r-red, g-green, b-blue, w-white, k-black,i-invisible,y-yellow)
- 数据点 (., o, x, +, *, S, H, D, V, ^)
2.1 极坐标绘图
x = 0:0.1:2*pi;
r = cos(2*x);
polar(x, r)
2.2 函数绘图
fplot(fun, lims)
绘制由字符串 fun
指定函数名的函数在 $x$ 轴区间为 lims=[xmin, xmax]
的函数图。例如: \(f(x)=\begin{cases} x + 1,\;\;x<1\\ 1 +\frac{1}{x},\;\; x\geq 1 \end{cases}\)
2.3 等高线图
[M, c] = contourf(X, Y, Z, 20)
X, Y
都是二维矩阵,储存点的横纵坐标(一般用meshgrid()
生成)Z
为二维矩阵,储存点的高度20
表示将等高线地图强制划分为 20 个层级M
为等高线矩阵c
为等高线对象,可以对其进行属性设置(线形、线色),例如:
c.EdgeColor='none'
不显示区分线
示例:
[X, Y] = meshgrid(1:20, 1:20);
Z = Y - X;
[M, c] = contourf(X, Y, Z, 20);
c.EdgeColor = 'none';

图 2-1:等高线图
2.3.1 梯度与箭头绘制
生成梯度
[DX, DY] = gradient(Z, dx, dy)
Z
为二维矩阵,储存点的高度dx, dy
为数字,表示箭头绘制的间隔(越大表示箭头越稀疏)
绘制箭头
quiver(X, Y, DX, DY) % 这个没啥好解释的
示例(矩阵 X, Y, Z
源于 section 2.3)
[M, c] = contourf(X, Y, Z, 20);
c.EdgeColor = 'none'; hold on;
[DX,DY] = gradient(Z,1,0.5);
quiver(X, Y, -DX, -DY);

图 2-2:带箭头的等高线图
2.4 柱状图
3. 三维绘图
3.1 三维条形图
Z = [1, 1, 2, 3;
2, 2, 4, 6;
3, 3, 6, 8];
bar3(Z)
z_{ij}=n
的绘制效果:
在 x-y 坐标系下的 (i,j)
位置绘制一个高 n
的长方柱。例如:

图 3-1:三维条形图
3.2 三维散点图
scatter3(x, y, z, s, c);
% x, y, z 即三维空间坐标
% s 表示散点的大小
% c 表示散点的颜色
示例:
[X, Y] = meshgrid(1:0.3:100, 1:0.3:100);
Z = sin(X) + cos(X)';
x = X(:); y = Y(:); z = Z(:);
s = ones(length(z), 1) * 3;
% 给点上色
c = [];
for i = 1:length(z)
if z(i) > 1.5, c(i, :) = [1 0 0];
elseif z(i) < 0.5, c(i, :) = [0 1 0];
else, c(i, :) = [0 0 1];
end
end
scatter3(x, y, z, s, c)

图 3-2:三维散点图
3.3 三维曲面图
surf(X, Y, Z);
示例:
[X, Y] = meshgrid(1:0.3:10, 1:0.3:10);
Z = sin(X) + cos(Y);
s = surf(X, Y, Z);
s.EdgeColor = 'none';

图 3-3:三维曲面图
3.4 三维几何体
3.4.1 圆柱和圆台
[X, Y, Z] = cylinder(r)
r
表示圆台/ 圆柱半径的变化,可以是关于t
的函数
示例:
figure;
t = 0:0.1:1;
subplot(1, 2, 1);
[X, Y, Z] = cylinder(1.5);
surf(X, Y, Z); axis square;
subplot(1, 2, 2);
[X, Y, Z] = cylinder(2 - t);
surf(X, Y, Z); axis square;

图 3-4:圆锥/ 圆台图
4 其他
4.1 制作 gif
4.1.1 画图的同时生成 gif
p = scatter(randn, randn);
axis([-3, 3, -3, 3]); hold on;
% 将当前图像存储至变量 A, map
% getframe 表示获取当前图像
[A,map] = rgb2ind(frame2im(getframe),256);
% 将 A, map 存储为 'image.gif' 图像的第一帧
imwrite(A,map,'image.gif','LoopCount',65535,'DelayTime',0.1);
for i = 1:10
p = scatter(randn, randn); hold on;
[A,map] = rgb2ind(frame2im(getframe),256);
% 将新的 A, map 存储为新的一帧并添加至 'image.gif' 中
imwrite(A,map,'image.gif','WriteMode','append','DelayTime',0.1);
pause('on')
pause(0.2)
end
效果图:

图 4-1:示例:gif 动图
4.1.2 将现有的图片制作成 gif
令用于生成 gif 的图片集包含 10 张名为 'image1.jpg'
… 'image10.jpg'
的图片(matlab 图片保存详见 section 1.3)
for j=1:10
% 获取图片
I = imread(sprintf('image%d.jpg',i));
[A,map] = rgb2ind(I,256);
% 生成 gif 并保存
if(i == 1)
imwrite(A,map,'image.gif','DelayTime',0.1,'LoopCount',Inf);
else
imwrite(A,map,'image.gif','WriteMode','append','DelayTime',0.1);
end
end
Document Information
- Author: Zeka Lee
- Link: https://zhekaili.github.io/wiki/matlab-drawing/
- Copyright: 自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)