Есть ли способ сказать Matlab не украсть фокус окна (из внешнего редактора), такой как Emacs) при графических командах, таких как figure
и plot
. Это значительно увеличило бы мою производительность, потому что я часто хочу продолжить разработку кода во время обработки данных (повторной).
Возможно, трюк заключается в том, чтобы не использовать оператор цифры, а напрямую изменять текущий показатель. Это изменит активный график без изменения фокуса. Обычно я делаю что-то вроде этого:
function change_current_figure(h)
set(0,'CurrentFigure',h)
Затем все операторы рисунка (h) необходимо изменить на change_curent_figure (h).
Примечание. Это включено в документацию matlab.
Следует отметить, что это работает только в том случае, если фигура уже создана. Если новые цифры будут периодически создаваться, можно создать цифры как самые первые строки кода, сохранить дескрипторы, обработать, а затем зарисовать их. Этот пример будет работать. Обратите внимание: команда drawow очистит буфер событий, убедившись, что все фигуры нанесены на график.
Я видел эту работу с 2007 по 2010 год, не уверен, поддерживают ли ее последние или более ранние версии, хотя у меня нет причин подозревать, что они этого не делают.
fig1=figure;
fig2=figure;
drawnow;
[a b]=do_complex_processing;
change_current_figure(fig1)
plot(a);
change_current_figure(fig2)
plot(b);
У меня есть тот же вопрос, с дополнительной сложностью, что код, создающий цифры, пришел от внешнего поставщика, и я не хотел его изменять. Вот две возможности (идентифицированные с помощью поддержки 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
Док-станция:
Это поместит фигуру в окно Matlab IDE.
Сделайте новые фигуры состыкованными и запустите код:
set(0, 'DefaultFigureWindowStyle', 'docked');
for i = 1:10
fprintf('i: %g\n', i)
figure;
pause(1);
end
set(0, 'DefaultFigureWindowStyle', 'normal');