Matlab 如何控制bayesopt函数中出现的图形?

Matlab 如何控制bayesopt函数中出现的图形?,matlab,plot,matlab-figure,bayesian,Matlab,Plot,Matlab Figure,Bayesian,绘制如下图形: 如何访问这些图形以修改标题或其他内容?如果我使用gcf则不能保证我得到正确的图形,因为我可以在执行期间将焦点更改为另一个图形窗口。显然bayesopt不允许您返回图形句柄。因此,我建议您在呼叫bayesopt后直接在线呼叫h=gcf,从而强制程序将图形句柄返回到h,然后可以在任何所需的时间修改该句柄,即使在移动到其他图形时也是如此 results = bayesopt(fun,vars,Name,Value); % execute bayesian optimisation h

绘制如下图形:


如何访问这些图形以修改标题或其他内容?如果我使用
gcf
则不能保证我得到正确的图形,因为我可以在执行期间将焦点更改为另一个图形窗口。

显然
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
调用之间的几毫秒内单击图形,我认为这是不可能的,不值得考虑,特别是因为它需要人工干预

正如和在评论中指出的那样,这些数字被标记,因此可以通过以下方式找到:


bayesopt
可以运行数小时(取决于任务),并且在任务结束之前,您始终有时间切换图形;我在
plotFcn
回调中创建了检测图,但这也不能保证result@Dims:由
bayesopt
生成的图形是否具有可搜索的特定标记或其他特征?我想你可以使用
findobj
找到正确的人物。可能是这样,但我不确定要搜索哪个标签,以及不同跑步的人物是否有不同的标签…@CrisLuengo yes-两个人物是通过此功能创建的,一个有标签
'bayesopt.MinObjective'
,另一个有标签
'bayesopt.ObjectiveModel'
@Dims当您调用
get(0,'Children')
时,后面创建的图形将首先出现。在这种情况下,
h1=findobj(0,'tag','bayesopt.MinObjective')
将返回第一个图形的句柄,类似的行将找到另一个图形。(我没有这个工具箱,因此无法测试,因此无法将其作为答案写入。)
h1 = findobj(0,'tag','bayesopt.MinObjective')