Skip to content

MATLAB - 绘制矩形

在 MATLAB 中,rectangle 函数是一个多功能工具,用于在您的绘图中添加矩形。这对于各种可视化任务至关重要,例如突出显示数据中特定的感兴趣区域、图形注释或构建基本的图形用户界面(GUI)。了解如何控制矩形的位置、大小和外观是 MATLAB 图形中的一项基本技能。

rectangle 函数创建一个 Rectangle 对象。您可以在创建时使用名称-值对控制其属性,也可以在以后使用对象句柄进行修改。现代语法具有高度可读性和灵活性。

% 推荐:创建一个矩形并存储其句柄
r = rectangle('Position', [x, y, w, h])
% 使用名称-值对指定属性
r = rectangle('Position', pos, 'FaceColor', 'r', 'EdgeColor', 'b')
% 添加曲率以创建圆角
r = rectangle('Position', pos, 'Curvature', [h_curv, v_curv])
% 在特定的坐标轴句柄 'ax' 中绘制
r = rectangle(ax, 'Position', pos)
% 使用现代的 Name=Value 语法(R2021a 及更高版本)
r = rectangle(Position=pos, FaceColor="red")
  • 'Position', [x, y, w, h]:这是最重要的属性。它是一个四元素向量,其中 [x, y] 定义了左下角的坐标,[w, h] 分别定义了宽度和高度。
  • 图形句柄 (r):将 rectangle 函数的输出存储到一个变量(例如 r)中,您将获得一个图形对象的句柄。此句柄对于在矩形绘制之后修改其属性至关重要。
  • 'Curvature', [h_curv, v_curv]:此属性允许您创建圆角矩形。曲率值范围从 0(无曲线)到 1(最大曲线)。值为 [1, 1] 可创建椭圆或圆形。
  • 目标坐标轴 (ax):默认情况下,rectangle 会在当前坐标轴上绘制(通过 gca 获取)。要在特定的子图或图窗中绘制,您必须将坐标轴句柄作为第一个参数传递。

您可以使用矩形的属性来自定义其外观。使用点表示法(例如,r.FaceColor = 'blue')在矩形句柄上访问和修改它们。

PropertyDescriptionExample Values
FaceColor设置矩形的内部填充颜色。'red'(红色), 'g'(绿色), '#FFC0CB'(十六进制颜色), [0.1 0.5 0.9](RGB三元组), 'none'(无)
EdgeColor设置矩形边框的颜色。'blue'(蓝色), 'k'(黑色), '#000000'(十六进制颜色), [0 0 0](RGB三元组), 'none'(无)
FaceAlpha控制填充颜色的透明度。0 表示完全透明,1 表示完全不透明。一个介于 0 到 1 之间的标量值。默认值为 1。
LineWidth指定边框线的粗细(以点为单位)。一个正标量值。默认值为 0.5。
LineStyle定义边框线的样式。'-'(实线), '--'(虚线), ':'(点线), '-.'(点划线), 'none'(无)
PropertyDescriptionValues
Visible控制矩形是显示还是隐藏。'on'(默认)或 'off'
HandleVisibility控制对象的句柄是否在其父级子对象列表中可见。对于管理复杂绘图很重要。'on'(默认), 'callback', 'off'

此示例创建一个基本绘图并添加一个带样式、半透明的矩形。

% 创建一个新的图窗和坐标轴
figure;
axis([0 10 0 10]); % 设置绘图范围
hold on; % 允许在同一坐标轴上绘制多个对象
grid on;
% 定义矩形属性
pos = [2 2 5 3]; % [x, y, 宽度, 高度]
% 绘制矩形并存储其句柄
r = rectangle('Position', pos, ...
'FaceColor', [0.5 0.7 1.0], ... % 浅蓝色
'EdgeColor', 'b', ...
'LineWidth', 2, ...
'LineStyle', '--');
% 添加标签
text(pos(1), pos(2)-0.5, 'Styled Rectangle');
hold off;
title('Basic Rectangle with Styling');
% 您可以使用句柄 'r' 稍后修改它
pause(2); % 等待 2 秒
r.FaceAlpha = 0.5; % 使其半透明
title('Updated with Transparency');

预期输出: 将出现一个绘图窗口,其中包含一个虚线边框矩形。两秒后,矩形将变为半透明。

一个常见的用例是在数据绘图中突出显示特定区域。

% 生成一些示例数据
x = linspace(0, 2*pi, 100);
y = sin(x) + 0.1*randn(1, 100);
% 创建绘图
figure;
plot(x, y);
hold on;
title('Highlighting a Region of Interest');
xlabel('Time (s)');
ylabel('Amplitude');
% 突出显示信号在 pi/2 和 3*pi/2 之间为正的区域
rectangle('Position', [pi/2, 0, pi, 1.2], ...
'FaceColor', [1 0.9 0.9], ... % 浅红色
'EdgeColor', 'none', ...
'FaceAlpha', 0.5);
% 添加文本注释
text(pi, 0.5, 'Area of Interest', 'HorizontalAlignment', 'center');
hold off;

预期输出: 显示一个正弦波绘图,其中一个半透明的红色矩形突出显示波形的峰值区域。

  • 始终使用 hold on:在现有绘图上绘制矩形之前,请使用 hold on 以防止绘图被清除。
  • 管理坐标轴限制:rectangle 函数不会自动调整绘图的坐标轴限制。您可能需要使用 axis() 或 xlim()/ylim() 手动设置它们,以确保您的矩形可见。
  • 完美的正方形和圆形:要确保等宽高的矩形显示为正方形,请使用 axis equal。同样,这将使 Curvature=[1,1] 的矩形显示为完美的圆形。
  • 性能:在绘制许多矩形的循环中,使用向量化输入一次性创建所有矩形,可以比在循环中逐个创建它们显著更快。