停止 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
有没有一种简单的方法可以让多个 figures 均匀分布在 os 一台显示器上而无需手动调整?
我曾尝试使用 autoArrangeFigures Matlab 社区功能,但运气不佳。首先,我遇到了各种脚本错误,一旦解决,它就无法在 Linux (pop-os) 环境中停止重叠图形。
下面是一个我称为 tilefig
的函数,它仅在工具栏上平铺重叠的图形,即最大化绘图可见性。在 MATLAB 中进行了测试,但我对 allchild(0)
and
我已经注释了代码,但基本上逻辑是
- 获取所有打开的图形对象的句柄
- 从给定位置或当前图形的位置开始
- 循环更新后续图形的位置,根据屏幕大小和最大 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