Как контролировать фигуру, которая появляется в функции байесопта? - PullRequest
0 голосов
/ 19 сентября 2018

bayesopt рисует фигуры, подобные этой:

enter image description here

Как получить доступ к таким фигурам, чтобы изменить заголовок или что-то еще?Если я использую gcf, это не гарантирует, что я получу правильную фигуру, потому что я могу изменить фокус на другое окно фигуры во время выполнения.

1 Ответ

0 голосов
/ 19 сентября 2018

Видимо 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')
...