前言
在数据分析和数学建模中,可视化是一个非常关键的步骤。Matlab 提供了丰富的绘图和可视化工具,可以方便地创建各种类型的图形。本文将详细介绍 Matlab 的绘图与可视化功能,包括二维绘图、三维绘图、多图绘制、图形属性设置等。
一、二维绘图
Matlab 提供了多种函数用于绘制二维图形,如 plot
、scatter
、bar
、pie
等。
plot
函数plot
函数用于绘制二维线图。
x = 0:0.1:10; % 创建 x 数据
y = sin(x); % 计算 y 数据
plot(x, y); % 绘制二维线图
title('Sin Function'); % 设置标题
xlabel('x'); % 设置 x 轴标签
ylabel('sin(x)'); % 设置 y 轴标签
grid on; % 打开网格
scatter
函数scatter
函数用于绘制二维散点图。
x = rand(1, 100); % x 轴随机数据
y = rand(1, 100); % y 轴随机数据
scatter(x, y, 'filled'); % 绘制二维散点图
title('Scatter Plot'); % 设置标题
xlabel('x'); % 设置 x 轴标签
ylabel('y'); % 设置 y 轴标签
grid on; % 打开网格
bar
函数bar
函数用于绘制柱状图。
x = 1:5; % 确定 x 轴数据
y = [10, 20, 30, 25, 15]; % 柱状图高度
bar(x, y); % 绘制柱状图
title('Bar Graph'); % 设置标题
xlabel('Category'); % 设置 x 轴标签
ylabel('Values'); % 设置 y 轴标签
grid on; % 打开网格
下表总结了常用的二维绘图函数及其示例:
函数 | 示例 | 说明 |
---|---|---|
plot |
plot(x, y); |
绘制二维线图 |
scatter |
scatter(x, y, 'filled'); |
绘制二维散点图 |
bar |
bar(x, y); |
绘制柱状图 |
pie |
pie([10, 20, 30, 40]); |
绘制饼图 |
二、图形属性设置
在 Matlab 中,我们不仅可以绘制图形,还可以自定义图形的各种属性,包括颜色、线型、标记、标题、标签、网格和坐标轴等。
- 颜色与线型
- 可以通过指定颜色和线型来更改图形外观。
x = 0:0.1:10;
y_sin = sin(x);
y_cos = cos(x);
plot(x, y_sin, '--r', x, y_cos, ':b'); % 使用 '--r' 和 ':b' 分别指定颜色和线型
legend('sin(x)','cos(x)'); % 添加图例
- 标记
- 通过
Marker
属性来设置数据点的标记样式。
- 通过
plot(x, y_sin, '-or'); % 使用 '-or' 设置线型和标记
- 标题和标签
- 通过
title
、xlabel
、ylabel
等函数来设置标题和轴标签。
- 通过
title('Sin and Cos Functions');
xlabel('x');
ylabel('Function Values');
- 网格与坐标轴
- 使用
grid
打开或关闭网格,使用axis
设置坐标轴范围。
- 使用
grid on; % 打开网格
axis([0 10 -1.5 1.5]); % 设置坐标轴范围
以下是图形属性设置的常用操作:
操作 | 示例 | 说明 |
---|---|---|
设置颜色 | plot(x, y, '-r'); |
绘制红色线条 |
设置线型 | plot(x, y, '--'); |
绘制虚线 |
设置标记 | plot(x, y, 'o'); |
使用圆形标记绘制数据点 |
标题和标签 | title('Title'); xlabel('X Axis'); ylabel('Y Axis'); |
设置标题和轴标签 |
网格 | grid on; |
打开网格 |
坐标轴范围 | axis([xmin xmax ymin ymax]); |
设置坐标轴范围 |
三、多图绘制
Matlab 支持在一个图窗口中绘制多个子图,通过 subplot
函数可以实现这一功能。此外,还可以使用 figure
函数创建多个图窗口。
subplot
函数- 可以在同一个图窗口中创建多个子图。
x = 0:0.1:10;
y1 = sin(x);
y2 = cos(x);
subplot(2, 1, 1); % 创建2行1列的子图,当前是第一个子图
plot(x, y1);
title('Sin(x)');
subplot(2, 1, 2); % 创建2行1列的子图,当前是第二个子图
plot(x, y2);
title('Cos(x)');
figure
函数- 可以创建多个图窗口。
figure; % 创建第一个图窗口
plot(x, y1);
title('Figure 1: Sin(x)');
figure; % 创建第二个图窗口
plot(x, y2);
title('Figure 2: Cos(x)');
以下是多图绘制的常用操作:
操作 | 示例 | 说明 |
---|---|---|
子图 | subplot(2, 1, 1); plot(x, y1); |
创建2行1列的第一个子图 |
新窗口 | figure; plot(x, y1); |
创建新的图窗口 |
四、三维绘图
Matlab 也支持三维绘图,主要函数有 plot3
、mesh
、surf
等。
plot3
函数- 绘制三维曲线图。
t = 0:0.1:10;
x = sin(t);
y = cos(t);
z = t;
plot3(x, y, z); % 绘制三维曲线
title('3D Plot');
xlabel('x');
ylabel('y');
zlabel('z');
grid on;
mesh
和surf
函数- 绘制三维网格图和三维表面图。
[X, Y] = meshgrid(-3:0.1:3, -3:0.1:3);
Z = sin(sqrt(X.^2 + Y.^2));
subplot(1, 2, 1);
mesh(X, Y, Z); % 绘制三维网格图
title('Mesh Plot');
subplot(1, 2, 2);
surf(X, Y, Z); % 绘制三维表面图
title('Surface Plot');
以下是三维绘图的常用操作:
操作 | 示例 | 说明 |
---|---|---|
三维曲线图 | plot3(x, y, z); |
绘制三维曲线图 |
三维网格图 | mesh(X, Y, Z); |
绘制三维网格图 |
三维表面图 | surf(X, Y, Z); |
绘制三维表面图 |
五、绘图技巧
在绘图过程中,除了基本的绘制功能外,还可以通过一些技巧来美化图形并提高其可读性。以下是一些常用的绘图技巧。
- 图例
- 使用
legend
函数添加图例,帮助说明图中的不同数据系列。
- 使用
x = 0:0.1:10;
y1 = sin(x);
y2 = cos(x);
plot(x, y1, '-r', x, y2, '-b');
legend('sin(x)', 'cos(x)'); % 添加图例
title('Sin and Cos Functions');
xlabel('x');
ylabel('Function Values');
grid on;
- 轴标签和数据标注
- 使用
xlabel
,ylabel
,zlabel
添加轴标签,使用text
和gtext
函数添加数据标注。
- 使用
plot(x, y1, '-r', x, y2, '-b');
title('Sin and Cos Functions');
xlabel('x');
ylabel('Function Values');
grid on;
% 添加数据标注
text(5, 0, 'sin(5) = 0'); % 在图中指定的位置添加文本
gtext('cos(x)'); % 在图中通过鼠标点击指定位置添加文本
- 图形美化
- 通过设置字体、线条粗细、颜色等属性来美化图形。
plot(x, y1, '-r', 'LineWidth', 2); % 设置线条粗细
hold on;
plot(x, y2, '-b', 'LineWidth', 2);
legend('sin(x)', 'cos(x)'); % 添加图例
title('Sin and Cos Functions', 'FontSize', 14); % 设置标题字体大小
xlabel('x', 'FontSize', 12); % 设置 x 轴标签字体大小
ylabel('Function Values', 'FontSize', 12); % 设置 y 轴标签字体大小
grid on;
- 保存图像
- 使用
saveas
和print
函数保存图形为图像文件。
- 使用
% 假设已经绘制了图形
saveas(gcf, 'my_plot.png'); % 保存为 PNG 图像
print('-dpng', 'my_plot.png'); % 保存为 PNG 图像
print('-depsc', 'my_plot.eps'); % 保存为 EPS 图像
以下是绘图技巧的常用操作总结:
操作 | 示例 | 说明 |
---|---|---|
图例 | legend('sin(x)', 'cos(x)'); |
添加图例 |
轴标签 | xlabel('x'); ylabel('y'); |
添加 x 轴和 y 轴标签 |
数据标注 | text(x, y, 'Text'); |
在指定位置添加文本 |
设置字体 | xlabel('x', 'FontSize', 12); |
设置标签的字体大小 |
设置线条 | plot(x, y, 'LineWidth', 2); |
设置线条粗细 |
保存图像 | saveas(gcf, 'file.png'); |
将图形保存为图像文件 |
六、绘图的高级技巧
为了进一步提升数据展示效果,Matlab 还提供了更多高级的绘图技巧,可以用来创建动画和交互式图形,并实现更复杂的图形美化。
- 创建动画
- 通过一系列图形的连续绘制,可以创建动画效果。常用
getframe
和movie
函数。
- 通过一系列图形的连续绘制,可以创建动画效果。常用
fig = figure;
for k = 1:50
y = sin(2*pi*k/50 * x);
plot(x, y);
axis([0 10 -1 1]);
M(k) = getframe(fig);
end
movie(fig, M, 2); % 播放动画,重复播放2次
- 交互式图形
- Matlab 支持交互式图形,可以通过鼠标点击和拖动来调整图形,例如
datacursormode
。
- Matlab 支持交互式图形,可以通过鼠标点击和拖动来调整图形,例如
plot(x, y1, '-r', x, y2, '-b');
title('Sin and Cos Functions');
xlabel('x');
ylabel('Function Values');
grid on;
% 启用数据提示模式
datacursormode on;
- 复杂图形布局
- 使用
tiledlayout
和nexttile
函数,可以创建复杂的图形布局。
- 使用
t = tiledlayout(2, 2); % 创建2×2网格布局
% 第一个子图
nexttile;
plot(x, y1);
title('Sin(x)');
% 第二个子图
nexttile;
plot(x, y2);
title('Cos(x)');
% 第三个子图
nexttile;
plot(x, y1 + y2);
title('Sin(x) + Cos(x)');
% 第四个子图
nexttile;
plot(x, y1 - y2);
title('Sin(x) - Cos(x)');
以下是高级绘图技巧的常用操作总结:
操作 | 示例 | 说明 |
---|---|---|
创建动画 | movie(fig, M, 2); |
创建并播放动画 |
交互式图形 | datacursormode on; |
启用数据提示模式 |
复杂图形布局 | tiledlayout(2, 2); nexttile; |
创建复杂的图形布局 |
七、实例示范:绘制多功能图形
综合应用以上绘图技巧,下面我们通过一个实际示例展示如何绘制一个包含多种图形和美化功能的图。
x = 0:0.01:10;
y1 = sin(x);
y2 = cos(x);
y3 = y1 .* y2;
% 创建图形布局
t = tiledlayout(2, 2, 'TileSpacing', 'Compact', 'Padding', 'Compact');
% 第一个子图:sin(x)
nexttile;
plot(x, y1, '-r', 'LineWidth', 2);
title('Sin(x)');
xlabel('x');
ylabel('Sin(x)');
grid on;
% 第二个子图:cos(x)
nexttile;
plot(x, y2, '-b', 'LineWidth', 2);
title('Cos(x)');
xlabel('x');
ylabel('Cos(x)');
grid on;
% 第三个子图:sin(x) * cos(x)
nexttile;
plot(x, y3, '-g', 'LineWidth', 2);
title('Sin(x) * Cos(x)');
xlabel('x');
ylabel('Sin(x) * Cos(x)');
grid on;
% 第四个子图:散点图
nexttile;
scatter(x, y3, 'filled');
title('Scatter Plot');
xlabel('x');
ylabel('Sin(x) * Cos(x)');
grid on;
% 添加统一标题和颜色图例
title(t, 'Multiple Functions and Scatter Plot');
legend(t.Children, 'Sin(x)', 'Cos(x)', 'Sin(x) * Cos(x)', 'Location', 'Best');
% 保存图像
saveas(gcf, 'multi_plot.png');
通过上述代码,我们创建了一个包含四个子图的综合图形,每个子图都展示了不同的数据并进行了美化处理。整个图形布局紧凑,标题和图例也得到了恰当的设置,并最终保存成了图像文件。
八、总结
本文详细介绍了 Matlab 中绘图与可视化的基本功能和技巧,包括二维绘图、三维绘图、图形属性设置、多图绘制、综合绘图技巧,以及最终通过一个综合实例展示如何应用这些技巧。通过这些设置,用户可以灵活地创建各种数据图形,以更直观地展示和分析数据。