Skip to content

MATLAB - 绘图

MATLAB 以其强大而灵活的 2D 和 3D 绘图功能而闻名。创建可用于出版的高质量可视化是该语言的核心优势。本指南将介绍创建和自定义图的现代面向对象方法。

创建绘图的基本工作流程包括以下步骤:

  • 1. 准备数据:创建包含您数据的向量或矩阵。linspace 函数非常适合生成用于函数绘图的等间距数据。
  • 2. 创建图窗:使用 figure 命令打开一个新窗口来显示您的图。
  • 3. 绘制数据:使用 plot、scatter 或 bar 等绘图函数创建初始图形。最佳实践是获取绘图对象的句柄(handle),以便后续进行自定义。
  • 4. 自定义和添加注释:添加标题、坐标轴标签、图例,并调整颜色、线型和其他属性,使绘图清晰且信息丰富。

让我们绘制从 0 到 2π 的函数 y = sin(x)。请注意使用 linspace 来创建平滑曲线。

% 1. Prepare Data
% 1. 准备数据
x = linspace(0, 2*pi, 200); % Create 200 points from 0 to 2*pi
% 创建从 0 到 2*pi 的 200 个点
y = sin(x);
% 2. Create a Figure
% 2. 创建图窗
figure;
% 3. Plot the Data
% 3. 绘制数据
plot(x, y, 'LineWidth', 2); % Plot with a line width of 2
% 以 2 的线宽绘制
% 4. Customize and Annotate
% 4. 自定义和添加注释
title('Plot of the Sine Function');
% 设置标题
xlabel('Angle (radians)');
% 设置 x 轴标签
ylabel('sin(x)');
% 设置 y 轴标签
grid on; % Add a grid
% 添加网格线
axis([0, 2*pi, -1.2, 1.2]); % Set axis limits [xmin, xmax, ymin, ymax]
% 设置坐标轴范围 [xmin, xmax, ymin, ymax]

在同一坐标轴上绘制多条线的最现代、最灵活的方法是使用 hold on 和 hold off 命令。这种方法比旧语法更具可读性和可扩展性。

x = linspace(0, 10, 150);
y1 = sin(x);
y2 = cos(x);
figure;
plot(x, y1, 'b-', 'LineWidth', 2); % Plot sin(x) as a solid blue line
% 将 sin(x) 绘制为蓝色实线
hold on; % Keep the current plot active for adding more lines
% 保持当前图窗活跃,以便添加更多线
plot(x, y2, 'r--', 'LineWidth', 2); % Plot cos(x) as a dashed red line
% 将 cos(x) 绘制为红色虚线
title('Sine and Cosine Functions');
% 设置标题
xlabel('x');
% 设置 x 轴标签
ylabel('Function Value');
% 设置 y 轴标签
legend('sin(x)', 'cos(x)', 'Location', 'southwest'); % Add a legend
% 添加图例
hold off; % Release the plot (new plots will replace it)
% 释放绘图(新绘图将替换它)
grid on;

MATLAB 提供了丰富的选项来自定义绘图的外观。您可以将颜色、线型和标记符号指定为一个字符串参数,或作为单独的名称-值对。

指定符类型值
r, g, b, k, m, c, y, w颜色红色、绿色、蓝色、黑色、洋红色、青色、黄色、白色
-线型实线(默认)
--线型虚线
:线型点线
-.线型点划线
o, +, *, ., x, s, d标记圆圈、加号、星号、点、叉号、正方形、菱形

示例: plot(x, y, '--mo') 创建一个带有圆形标记的虚线洋红色线条,每个数据点都有标记。

subplot 函数允许您在单个图窗窗口中以网格形式显示多个图。语法是 subplot(m, n, p),其中 m 是行数,n 是列数,p 是当前图的索引(按行计数)。

x = linspace(0, 5, 100);
figure;
% First subplot (top)
% 第一个子图(顶部)
subplot(2, 1, 1);
y1 = exp(-1.5*x) .* sin(10*x);
plot(x, y1);
title('Subplot 1: Damped Sine Wave');
% 设置标题
ylabel('Amplitude');
% 设置 y 轴标签
grid on;
% Second subplot (bottom)
% 第二个子图(底部)
subplot(2, 1, 2);
y2 = exp(-0.5*x) .* sin(10*x);
plot(x, y2);
title('Subplot 2: Less Damped Sine Wave');
% 设置标题
xlabel('Time (s)');
% 设置 x 轴标签
ylabel('Amplitude');
% 设置 y 轴标签
grid on;

MATLAB 的可视化库远不止线条图。以下是一些其他重要的绘图类型:

  • scatter:创建散点图,非常适合可视化两个变量之间的关系。
  • bar:创建条形图,用于比较不同类别的值。
  • histogram:创建直方图,显示一组数据的分布情况。
  • errorbar:创建带有每个数据点误差线的线条图。

要完全控制绘图的外观,您可以获取图形对象的句柄,并使用点表示法直接修改其属性。要保存最终的绘图,建议使用 exportgraphics 函数以获得高质量输出。

% ... (previous plotting code) ...
% ... (之前的绘图代码) ...
% Get handle to current axes and change font size
% 获取当前坐标轴句柄并更改字体大小
ax = gca;
ax.FontSize = 14;
% Save the current figure to a PNG file
% 将当前图窗保存为 PNG 文件
exportgraphics(ax, 'my_beautiful_plot.png', 'Resolution', 300);