微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以与 Ginput 相同的方式从 Ginputc 获取子图编号以更快的 Ginput 回答

如何解决以与 Ginput 相同的方式从 Ginputc 获取子图编号以更快的 Ginput 回答

我试图用在 fileexchange 上找到的函数 ginput 替换函数 ginputcCustom GINPUT from Jiro。我发现 ginput 第一次调用时启动很慢。 ginputc 更快。

我在 ginput 中使用的一项功能无法通过 ginputc 进行复制。当鼠标点击它时,我得到了子图编号。

此处针对 ginput 进行了说明: get-subplot-number-from-ginput

但为了更简单,这里有一些简单的代码来复制功能

  figure,hAx_mine(1)=subplot(1,3,1); hAx_mine(2)=subplot(1,2);hAx_mine(3)=subplot(1,3);
  [x,y,button] = ginput(1);
  [Lia,Locb]=ismember(gca,hAx_mine);
  disp(['Locb gives the subplot number that you have clicked: ' num2str(Locb)])
 

如果您在 ginputc 中尝试相同的操作,无论您单击哪个子图,它都会给出最后一个子图:

  figure,button] = ginputc(1);
  [Lia,hAx_mine);
  disp(['Locb gives the subplot number that you have clicked: ' num2str(Locb)])

一个选项可以将斧头作为 ginputc 的额外输出

  ...
  [x,button,ax] = ginputc(1);
  [Lia,Locb]=ismember(ax,hAx_mine);
  ...

但这也行不通。我想 ginputc 确实以某种方式改变了 gca,但经过几个小时的尝试,我还没有找到原因以及如何解决它。

解决方法

然而……我并没有放弃,而是没有对ginputc进行排序,而是专注于改进ginput。最初的目标是因为 ginput 非常慢,所以为什么不尝试改进它?

在该函数中,当处理新的 Matlab 工具栏时,setupFcn 的速度很慢。 setupFcn 的作用是禁用工具栏,以便在您使用 ginput 时它不会出现。

然而这个工具栏并不是很烦人,为什么要隐藏它呢?因此,我将 ginput 复制并重命名为 ginput_mine,以便我可以对其进行如下更改:

  1. 我评论了从第 221 行(禁用 AxesToolbar)到第 232 行(12 行)的代码
  2. 我还在第 268 行(恢复轴工具栏)到第 271 行(4 行)的 restoreFcn 中评论了第二名

它的作用是停止 ginput 以将 toolbarVisible 设置为关闭(并在 2. 恢复工具栏)。这导致更快的功能。我还注意到它的效果更好,因为它改进了我的点击注册,而不是错过了很多点击。

我不确定通过这种调整,ginput 的所有功能是否仍然有效,但我认为是这样。我的工具是一个标注图像的注释界面,我真的很高兴为我的用户让它变得更加流畅:-)

2021 年 3 月 28 日更新: 根据 Cris 的评论,我想我可以通过添加额外的步骤来改进我的解决方案。仅当您不再需要图中的工具栏时,此额外步骤才有用。 您所做的是(使用上述解决方案)在 ginput 的开头或在启动 ginput 之前添加 2 行,并在图中显示:

set(Fig,'MenuBar','none')
set(Fig,'ToolBar','none')

我可能会做得更快。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。