停止 Octave 中的重叠数字

Stop overlapping figures in Octave

有没有一种简单的方法可以让多个 figures 均匀分布在 os 一台显示器上而无需手动调整?

我曾尝试使用 autoArrangeFigures Matlab 社区功能,但运气不佳。首先,我遇到了各种脚本错误,一旦解决,它就无法在 Linux (pop-os) 环境中停止重叠图形。

下面是一个我称为 tilefig 的函数,它仅在工具栏上平铺重叠的图形,即最大化绘图可见性。在 MATLAB 中进行了测试,但我对 allchild(0) and 等一些不太常见的函数做了一些快速文档检查,我认为它应该与 Octave 兼容。

我已经注释了代码,但基本上逻辑是

  • 获取所有打开的图形对象的句柄
  • 从给定位置或当前图形的位置开始
  • 循环更新后续图形的位置,根据屏幕大小和最大 row/column 限制增加列号或行号。

运行 tilefig 没有输入将从 top-left 中的当前图形开始平铺整个屏幕。

为了使平铺整洁,它还会将所有数字调整为相同大小width/height。

tilefig([],4) 的示例结果有 7 个数字

function tilefig( maxrows, maxcols, p )
    % Tile figures to max rows/cols in a grid, can be [] to just use all
    % screen space. Optional input 'p' for top-left tile position, will use
    % current figure if omitted.
    AllFig = allchild(0);          % Get all figures
    pScr = get(0, 'screensize');   % Get screen size
    if nargin < 1 || isempty( maxrows )
        maxrows = inf;
    end
    if nargin < 2 || isempty( maxcols )
        maxcols = inf;
    end
    if nargin < 3                  
        p = get( gcf, 'Position' );   
    end
    pNew = p;       % Current position
    nr = 1; nc = 1; % Row/col numbers
    for ii = 1:numel(AllFig)
        if sum(pNew([1,3])) > pScr(3) || nc > maxcols
            % Exceeded screen width or max num columns
            nc = 1;
            nr = nr + 1;
            pNew(1) = p(1);
            pNew(2) = pNew(2) - pNew(4);
        end
        if pNew(2) < 0 || nr > maxrows
            % Loop back to the first row if exceeds screen height / max row
            nr = 1;
            pNew(2) = p(2);
        end        
        set( AllFig(ii), 'Position', pNew );
        nc = nc + 1;
        pNew = pNew + [pNew(3), 0, 0, 0];
    end    
    % Reverse the overlap
    for ii = numel(AllFig):-1:1
        figure( AllFig(ii) );
    end
end