Matlab多个图窗重叠问题解决,平铺函数TileFigs

在仿真过程中,我需要绘制 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

该功能的代码,以及对应的图形平铺效果展示。

相关推荐
傻啦嘿哟2 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670792 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
李少兄3 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
Seoyoneh4 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
Tangyuewei4 小时前
Java 写 Agent:模型只是组件
java·开发语言
小玮看世界5 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
繁星蓝雨5 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
Evand J6 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
杜大哥6 小时前
python程序:如何查看电脑【电池电量的剩余百分比】 和 【是否插入连接着充电器】?
开发语言·python
wuyk5556 小时前
Python网络爬虫入门到实战 第01章:爬虫到底是什么?原理、流程、合法性、风险全解析(零基础必看)
开发语言·爬虫·python