有没有办法告诉Matlab 不要在图形命令(如
figure
和plot
)时窃取窗口焦点(从外部编辑器,如Emacs),这样可以显著提高我的生产率,因为我经常需要在数据(重新)处理期间继续代码开发。figure
和plot
)时窃取窗口焦点(从外部编辑器,如Emacs),这样可以显著提高我的生产率,因为我经常需要在数据(重新)处理期间继续代码开发。有可能,诀窍在于不使用“figure”语句,而是直接更改当前图形。这将更改活动绘图而不改变焦点。通常我会这样做:
function change_current_figure(h)
set(0,'CurrentFigure',h)
然后,所有的figure(h)语句都需要改为change_curent_figure(h)。
请注意,这包含在matlab文档中。
需要注意的是,这仅适用于已经创建的图形。如果要定期创建新的图形,则可以将创建图形作为代码的前几行保存句柄,进行处理,然后绘制到它们上面。此示例将起作用。请注意,drawnow命令将刷新事件缓冲区,确保所有图形都被绘制。
我见过这个工作从2007年到2010年,不确定最新或早期版本是否支持此功能,尽管我没有理由怀疑他们不支持。
fig1=figure;
fig2=figure;
drawnow;
[a b]=do_complex_processing;
change_current_figure(fig1)
plot(a);
change_current_figure(fig2)
plot(b);
plot()
窃取了窗口焦点并提升了图形窗口,但这并没有帮助太多。我们也可以防止这种情况发生吗?我正在使用Ubuntu 11.10。 - Nordlöwimagesc
命令也适用吗?对我来说似乎有点棘手。 - Vesnogset(groot,'CurrentFigure',h)
。 groot
是图形系统根的句柄对象(即句柄编号0)。 - Cris Luengo我有同样的问题,但额外复杂的是创建图形的代码来自外部供应商,我不想修改它。这里有两个可能性(在MathWorks支持的帮助下确定),经过Matlab 2014b测试:
set(0, 'DefaultFigureVisible', 'off');
for i = 1:10
fprintf('i: %g\n', i)
figure;
pause(1);
end
set(0, 'DefaultFigureVisible', 'on');
figHandles = findall(0, 'Type', 'figure');
set(figHandles(:), 'visible', 'on')
这段代码确实实现了所需功能,但不方便的是你无法查看代码运行的进度,因此不能在出现问题时中断长时间执行。
figure('Visible','off')
创建不可见的图形,而不是设置默认的图形可见性。 - Cris Luengoset(0,'DefaultFigureVisible','off')
在 R2019a 版本可行。 - Cris Luengo