在仿真过程中,我需要绘制 10 多个独立的图形(figures),但默认情况下这些图形会重叠显示在同一位置。每次绘制完成后,我都需要手动逐个打开、拖动分开,不仅操作繁琐,在对比多图数据时也十分不便。
为此,我编写了一个可直接调用的函数,能够自动将所有显示的图形平铺排列,无需手动调整位置。以下是实现



Matlab
function TileFigures()
% TileFigures - 将所有打开的 MATLAB 图形窗口平铺在屏幕上
% 自动计算行数和列数,并根据屏幕分辨率调整窗口大小
% 1. 获取所有打开的图形句柄
figs = findall(0, 'Type', 'figure');
if isempty(figs)
disp('没有发现打开的图形窗口。');
return;
end
% 按照图形编号排序 (确保 Figure 1 在左上角)
[~, idx] = sort([figs.Number]);
figs = figs(idx);
numFigs = length(figs);
% 2. 获取屏幕尺寸 (像素单位)
% ScreenSize 是 [left, bottom, width, height]
screenSize = get(0, 'ScreenSize');
sw = screenSize(3);
sh = screenSize(4);
% 预留任务栏和菜单栏的空间 (可以根据需要调整)
margin_top = 80; % 顶部留白
margin_bottom = 50; % 底部留白 (任务栏)
availW = sw;
availH = sh - margin_top - margin_bottom;
% 3. 计算行数和列数
% 尽量让排列接近正方形
cols = ceil(sqrt(numFigs));
rows = ceil(numFigs / cols);
% 4. 计算每个小窗口的宽度和高度
figW = availW / cols;
figH = availH / rows;
% 5. 循环设置每个窗口的位置
for i = 1:numFigs
% 计算当前窗口所在的行列索引 (从0开始)
r = floor((i-1) / cols);
c = mod(i-1, cols);
% 计算坐标 (MATLAB 坐标系左下角是 [0,0])
% x = 当前列 * 宽度
% y = 总高度 - (当前行+1) * 高度 (从上往下排)
xPos = c * figW;
yPos = sh - margin_top - (r + 1) * figH;
% 设置位置 [left, bottom, width, height]
set(figs(i), 'Units', 'pixels');
set(figs(i), 'OuterPosition', [xPos + 1, yPos + 1, figW, figH]);
% 把窗口提到最前面
figure(figs(i));
end
end
该功能的代码,以及对应的图形平铺效果展示。