Видимо bayesopt
не позволяет вам возвращать дескриптор фигуры.Поэтому я предлагаю, чтобы на линии сразу после вашего звонка на bayesopt
вы звонили h=gcf;
, вынуждая вашу программу вернуть дескриптор фигуры на h
, который затем можно изменить в любой нужный момент, даже при переходе на другойцифры.
results = bayesopt(fun,vars,Name,Value); % execute bayesian optimisation
h = gcf; % directly after optimisation grab a figure handle
Теперь вы можете изменять свойства в h
, например, для заголовка, который вы просто делаете
h.CurrentAxes.Title.String = 'Your plot title'
Причина, по которой это работает, заключается в том, что MATLAB не отображает цифрыпока полный код не закончится.По крайней мере, так обстоит дело с моим сценарием, где я генерирую фигуру, выполняю несколько минут оптимизации, а затем генерирую другую фигуру.Обе цифры отображаются одновременно, то есть, когда MATLAB завершил выполнение полной программы.Таким образом, вы не можете нажимать на другие фигуры во время выполнения кода, поскольку их просто нет.Если у вас открыты более старые фигуры (из других сценариев), фокус все равно смещается на последнюю созданную фигуру, в тот момент, когда она создается в коде (а не когда она отображается), поэтому вам нужно будет щелкнуть фигуру внесколько миллисекунд между завершением вызова bayesopt
и вызовом gcf
, что, я бы сказал, настолько маловероятно, что об этом не стоит думать, особенно если это требует ручного вмешательства.
Как было отмечено в комментариях Cris Luengo и Dev-iL , цифры помечены и, таким образом, могут быть найдены с помощью findobj
:
h1 = findobj(0,'tag','bayesopt.MinObjective')