MATLAB - 格式化绘图
MATLAB - 格式化绘图
Section titled “MATLAB - 格式化绘图”MATLAB 的默认绘图功能性良好,但对于演示、出版物或详细分析,你需要自定义它们。有效的格式化能使你的数据更易于理解并突出关键见解。这包括添加描述性标签、调整坐标轴、改变颜色以及标注重要特征。
现代 MATLAB 绘图建立在图形对象(graphics objects)系统之上。绘图的每个元素——图窗、坐标轴、线条、文本——都是一个具有可更改属性的对象。最常见的工作流程是:
- 创建绘图。
- 获取你想要修改的图形对象句柄(例如,当前坐标轴)。
- 更改该对象的属性。
我们将从三个主要方面介绍绘图格式化:
- 标签与注解
- 坐标轴外观与控制
- 颜色与色图
标签提供上下文。没有标题或坐标轴标签的绘图通常毫无意义。注解,如文本或箭头,能吸引注意力到特定的数据点或区域。
以下函数用于添加标签和注解。它们大多数也接受可选的名称-值参数来自定义外观。
用于标签和注解的函数
Section titled “用于标签和注解的函数”| 函数 | 描述 |
|---|---|
| title(txt) | 为当前坐标轴添加标题。 |
| subtitle(txt) | 在标题下方添加副标题。 |
| xlabel(txt) | 为 x 轴添加标签。 |
| ylabel(txt) | 为 y 轴添加标签。 |
| zlabel(txt) | 为 z 轴添加标签(用于 3D 绘图)。 |
| legend() | 创建图例以识别多个数据系列。最好与绘图函数中的 DisplayName 属性一起使用。 |
| text(x, y, txt) | 在指定的数据坐标 (x, y) 处向绘图添加文本。 |
| annotation(type, …) | 在相对于图窗(而非数据)的坐标中添加形状、箭头或文本框。 |
| xline(val) | 在特定 x 值处创建垂直线。 |
| yline(val) | 在特定 y 值处创建水平线。 |
示例 1:基本标签和标题
Section titled “示例 1:基本标签和标题”让我们创建一个简单绘图并添加标题、副标题和坐标轴标签。我们可以使用名称-值对直接在函数调用中自定义字体大小和颜色。
% 1. 定义数据x = 0:0.1:2*pi;y = sin(x);
% 2. 创建绘图plot(x, y, 'LineWidth', 2);
% 3. 添加标签和标题title('Sine Wave Analysis', 'Color', 'b', 'FontSize', 16);subtitle('From 0 to 2*pi');xlabel('Angle [rad]');ylabel('Amplitude');
grid on; % 添加网格以提高可读性预期输出: 将显示一个正弦波绘图。它有一个蓝色、16 磅字体的主标题“Sine Wave Analysis”。标题下方是一个较小的副标题“From 0 to 2*pi”。x 轴标记为“Angle [rad]”,y 轴标记为“Amplitude”。背景中可见网格。
示例 2:添加图例和注解
Section titled “示例 2:添加图例和注解”创建图例的现代且最健壮的方法是在绘制每条线时指定其 DisplayName。然后 MATLAB 将自动在图例中使用这些名称。
x = linspace(0, 10, 150);y1 = cos(x);y2 = 0.5 * cos(x - 0.5);
% 绘制数据系列,使用 'DisplayName' 作为图例figure; % 创建新的图窗窗口hold on; % 允许在同一坐标轴上绘制多个图形plot(x, y1, 'DisplayName', 'Signal A', 'LineWidth', 2);plot(x, y2, 'DisplayName', 'Signal B (shifted)', 'LineWidth', 2);hold off;
% 使用指定的显示名称添加图例legend('Location', 'northeast');
title('Comparison of Two Signals');xlabel('Time (s)');ylabel('Value');
% 标注峰值text(0.5, 1, ' Initial Peak', 'FontWeight', 'bold');
% 添加垂直线以标记事件xline(5, '--r', 'Event X');预期输出: 绘图显示了两条余弦波。右上角的图例正确地将实线标记为“Signal A”,将虚线标记为“Signal B (shifted)”。文本“Initial Peak”出现在 Signal A 的第一个峰值附近。在 x=5 处绘制了一条带有标签“Event X”的垂直虚线红线。
坐标轴外观与控制
Section titled “坐标轴外观与控制”你对坐标轴拥有完全控制权,包括其限制、刻度(线性或对数)、刻度线和周围边框。最佳实践是使用 ax = gca; 获取当前坐标轴的句柄,然后修改其属性。
| 属性/函数 | 描述 |
|---|---|
| xlim, ylim, zlim | 设置或获取相应坐标轴的限制。示例:xlim([0 10])。 |
| ax.XScale, ax.YScale | 将坐标轴刻度设置为 ‘linear’(线性)或 ‘log’(对数)。示例:ax.XScale = 'log';。 |
| ax.XTick, ax.YTick | 指定刻度线的位置。示例:ax.XTick = 0:pi:2*pi;。 |
| ax.XTickLabel, ax.YTickLabel | 为每个刻度线提供自定义文本标签。示例:ax.XTickLabel = {'0', '\pi', '2\pi'};。 |
| box on/off | 切换绘图周围边框的可见性。 |
| grid on/off/minor | 切换主网格线和次网格线的可见性。 |
| axis equal/tight | 调整纵横比或使坐标轴紧密围绕数据。 |
示例 3:自定义坐标轴
Section titled “示例 3:自定义坐标轴”此示例演示如何控制各种坐标轴属性以获得出版质量的绘图。
x = logspace(-1, 2, 100); % 创建对数间距向量y = 1 ./ (1 + x);
plot(x, y, 'LineWidth', 2);
title('Frequency Response');xlabel('Frequency (Hz)');ylabel('Gain');
% 获取当前坐标轴句柄ax = gca;
% 设置坐标轴属性ax.XScale = 'log'; % 使用对数 x 轴ax.XLim = [0.1 100]; % 设置 x 轴限制ax.YLim = [0 1.1]; % 设置 y 轴限制ax.FontSize = 12; % 设置整个坐标轴的字体大小ax.XGrid = 'on'; % 仅开启 x 轴网格ax.YGrid = 'on'; % 仅开启 y 轴网格ax.GridAlpha = 0.5; % 使网格线半透明ax.Box = 'on'; % 确保边框可见预期输出: 将显示一个增益与频率的绘图。x 轴采用对数刻度,范围从 0.1 到 100。y 轴是线性的,范围从 0 到 1.1。绘图包含在一个带有半透明网格线的边框中,所有文本的字体大小均为 12。
颜色是区分数据或在 2D 绘图上表示第三维(例如,热图)的强大工具。MATLAB 提供了一套内置色图,其中 parula 是默认的。parula 以及 viridis 和 plasma 等其他现代色图旨在视觉上均匀且对色觉缺陷者清晰可见。
| 函数 | 描述 |
|---|---|
| colormap(map) | 将指定的色图应用于当前图窗。map 可以是预定义名称(例如 ‘viridis’)或自定义的 M×3 RGB 值数组。 |
| colorbar | 显示一个颜色条,显示颜色到数据值的映射。 |
| clim([cmin cmax]) | 控制颜色限制,将 cmin 映射到色图中的第一个颜色,将 cmax 映射到最后一个颜色。 |
示例 4:使用色图和颜色条
Section titled “示例 4:使用色图和颜色条”曲面图是色图的常见用例。在这里,我们将可视化 peaks 函数并自定义其颜色表示。
% 1. 生成曲面数据[X, Y, Z] = peaks(25);
% 2. 创建曲面图figure;surf(X, Y, Z);
% 3. 应用现代、无障碍的色图colormap(viridis);
% 4. 添加带有描述性标签的颜色条cb = colorbar;cb.Label.String = 'Elevation';
% 5. 调整颜色限制以聚焦特定范围% clim([-5 5]);
title('Surface Plot with Viridis Colormap');xlabel('X-coordinate');ylabel('Y-coordinate');zlabel('Z-coordinate');预期输出:
生成了 peaks 函数的三维曲面图。曲面使用 ‘viridis’ 色图着色,该色图从深蓝色通过绿色过渡到亮黄色。绘图右侧显示了一个垂直颜色条,显示颜色刻度并标记为“Elevation”。