有没有办法告诉Matlab 不在figure
和plot
等图形命令上窃取窗口焦点(来自外部编辑器),例如Emacs。这会大大提高我的工作效率,因为我经常希望在数据(重新)处理过程中继续进行代码开发。
答案 0 :(得分:41)
有可能,诀窍是不使用figure语句,而是直接更改当前数字。这将在不改变焦点的情况下更改活动图。通常我做这样的事情:
function change_current_figure(h)
set(0,'CurrentFigure',h)
然后,所有图(h)语句都需要更改为change_curent_figure(h)。
请注意,这包含在matlab documentation.
中应该注意,这仅在已经创建了图形时才有效。如果要定期创建新的数字,可以创建数字作为前几行代码,保存句柄,进行处理,然后绘制到它们。这个例子可行。请注意,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);
答案 1 :(得分:2)
我有同样的问题,代码创建数据的额外复杂性来自外部供应商,我不想修改它。以下是在Matlab 2014b上测试的两种可能性(在MathWorks支持的帮助下确定):
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')
此代码完全符合您的需要,但更加不便的是您无法看到代码运行的任何进展,因此如果出现问题则无法长时间中断。