修改 autoArrangeFigures(来自 Matlab File Exchange)以将不同的图发送到不同的监视器

Modify autoArrangeFigures (from Matlab File Exchange) to send different plots to different monitors

正在使用

autoArrangeFigures(0,0,2); % (0,0,x) where x is monitor ID

可以选择放置所有图形的位置。但是,我想控制哪些数字进入哪个监视器。

MWE 尝试:

close all; clear all; clc

% make 10 figures
for i=1:10
    figure()
end

autoArrangeFigures(0,0,2); % (0,0,x) where x is monitor ID

pause(2)

% make 10 figures
for i=1:10
    figure()
end

autoArrangeFigures(0,0,1); % (0,0,x) where x is monitor ID

这只会将所有 20 个数字重定向到新的监视器位置。它不会保留显示器 2 中第一次调用 autoArrangeFigures(0,0,2) 时的 10 个图形位置,而是通过 autoArrangeFigures(0,0,1).[=13= 将所有 10+10 个图形重定向到显示器 1 ]

如何解决这个问题?

autoArrangeFigures 可在以下位置找到:

https://se.mathworks.com/matlabcentral/fileexchange/48480-automatically-arrange-figure-windows

您可以做的一件事是修改 autoArrangeFigures 函数以采用额外的(可选)参数 figHandles

将第一行修改为:

function autoArrangeFigures(NH, NW, monitor_id, figHandle)

要使此参数可选,您可以更改第 39 行

figHandle = sortFigureHandles(findobj('Type','figure'));

进入

if ~exist('figHandle', 'var') || isempty(figHandle)
    figHandle = sortFigureHandles(findobj('Type','figure'));
else
    figHandle = figHandle(:); % make row vector
end

那么你的 MWE 看起来像:

clear fig
% make 10 figures
for i=1:10
    fig(i) = figure();
end
autoArrangeFigures(0,0,2, fig); % (0,0,x) where x is monitor ID

% make 10 figures
for i=1:10
    fig(10+i) = figure();
end
autoArrangeFigures(0,0,1,fig(11:20)); % (0,0,x) where x is monitor ID

就我个人而言,我是来自 Matlab FEX 的 distFig 的粉丝,它可以开箱即用。

示例:

for i = 1:20
    fig(i) = figure();
end
distFig('screen', 'Secondary', 'only', 1:10) % place only fig 1:10 on the secondary screen
distFig('screen', 'Primary', 'only', 11:20) % place only fig 11:20 on the primary screen