修改autoArrangeFigures(从Matlab文件交换)以将不同的绘图发送到不同的监视器

修改autoArrangeFigures(从Matlab文件交换)以将不同的绘图发送到不同的监视器,matlab,position,monitor,figure,Matlab,Position,Monitor,Figure,使用 可以选择所有图形的放置位置。然而,我想控制哪些数字进入哪个监视器 MWE尝试: autoArrangeFigures(0,0,2); % (0,0,x) where x is monitor ID 这只会将所有20个数字重定向到新的监视器位置。它不会保留监视器2中第一次调用autoArrangeFigures(0,0,2)时的10位数位置,而是通过autoArrangeFigures(0,0,1)将所有10+10位数重定向到监视器1 如何解决这个问题 autoArrangeFigures

使用

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

MWE尝试:

autoArrangeFigures(0,0,2); % (0,0,x) where x is monitor ID
这只会将所有20个数字重定向到新的监视器位置。它不会保留监视器2中第一次调用autoArrangeFigures(0,0,2)时的10位数位置,而是通过autoArrangeFigures(0,0,1)将所有10+10位数重定向到监视器1

如何解决这个问题

autoArrangeFigures可在以下位置找到:


您可以做的一件事是修改
autoArrangeFigures
函数以获取附加(可选)参数
figHandles

将第一行修改为:

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
要使此参数可选,可以更改第39行

function autoArrangeFigures(NH, NW, monitor_id, figHandle)
进入

那么你的MWE看起来像:

if ~exist('figHandle', 'var') || isempty(figHandle)
    figHandle = sortFigureHandles(findobj('Type','figure'));
else
    figHandle = figHandle(:); % make row vector
end
就我个人而言,我是Matlab FEX的粉丝,它允许你从盒子里拿出想要的东西

例如:

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

我按照你的建议尝试过,包括更改函数autoArrangeFigures(NH、NW、monitor_id、figHandle),但它仍然生成与原始MWE相同的结果;distFig是否支持3个监视器?@Ole我知道了,我在更改为
autoArrangeFigures
时出错,请参阅更新
distFig
支持多个监视器,请阅读帮助以了解如何选择监视器。
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
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