以与 Ginput 相同的方式从 Ginputc 获取子图编号(用更快的 Ginput 回答)
Get subplot number from Ginputc the same way than Ginput (answer with faster Ginput)
我正在尝试用 fileexchange 上的函数 ginputc
替换函数 ginput
:
Custom GINPUT from Jiro。我发现 ginput
第一次调用时启动非常慢。 ginputc
更快。
我在 ginput
中使用了一项功能,但我无法通过 ginputc
复制。当鼠标点击它时,我得到了子图编号。
此处针对 ginput
进行了解释:
但为了更容易,这里有一些简单的代码来复制功能:
figure, hAx_mine(1)=subplot(1, 3, 1); hAx_mine(2)=subplot(1, 3, 2);hAx_mine(3)=subplot(1, 3, 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, hAx_mine(1)=subplot(1, 3, 1); hAx_mine(2)=subplot(1, 3, 2);hAx_mine(3)=subplot(1, 3, 3);
[x, y, button] = ginputc(1);
[Lia,Locb]=ismember(gca,hAx_mine);
disp(['Locb gives the subplot number that you have clicked: ' num2str(Locb)])
有一个选项可以让斧头作为 ginputc
的额外输出:
...
[x, y, button,ax] = ginputc(1);
[Lia,Locb]=ismember(ax,hAx_mine);
...
但这也不起作用。我想 ginputc
确实以某种方式改变了 gca
但经过几个小时的尝试,我还没有设法找到原因以及如何修复它。
但是...我没有放弃,而是专注于改进ginput
,而不是排序ginputc
。最初的目标是因为 ginput
很慢,所以为什么不尝试改进它呢?
在该函数中,当它处理新的 Matlab 工具栏时,您的速度很慢 setupFcn
。 setupFcn
所做的是禁用工具栏,因此当您使用 ginput
.
时它不会显示
不过这个工具栏并不讨厌,为什么要隐藏它呢?所以我复制了 ginput
并将其重命名为 ginput_mine
,这样我就可以像下面这样对其进行更改:
- 我注释了从第 221 行(禁用 AxesToolbar)到第 232 行(12 行)的代码
- 我还在第 268 行(Restore axestoolbar)到第 271 行(4 行)
restoreFcn
评论了第二名
所做的是停止 ginput
以将 toolbarVisible
设置为关闭(并在 2. 中恢复工具栏)。这导致更快的功能。我还注意到它效果更好,因为它改进了我的点击记录,而不是遗漏了很多点击。
我不确定经过这种调和后,ginput
的所有功能是否仍然有效,但我认为是这样。我的工具是一个用于标记图像的注释界面,我很高兴为我的用户提供了更加流畅的界面:-)
2021 年 3 月 28 日更新:
根据 Cris 的评论,我认为我可以通过添加一个额外的步骤来改进我的解决方案。这个额外的步骤只有在你不再需要图中的工具栏时才有用。
你所做的是(使用上述解决方案)在 ginput 的开头或启动 ginput 之前添加 2 行,用 Fig 你的数字:
set(Fig, 'MenuBar', 'none')
set(Fig, 'ToolBar', 'none')
我可能会做得更快。
我正在尝试用 fileexchange 上的函数 ginputc
替换函数 ginput
:
Custom GINPUT from Jiro。我发现 ginput
第一次调用时启动非常慢。 ginputc
更快。
我在 ginput
中使用了一项功能,但我无法通过 ginputc
复制。当鼠标点击它时,我得到了子图编号。
此处针对 ginput
进行了解释:
但为了更容易,这里有一些简单的代码来复制功能:
figure, hAx_mine(1)=subplot(1, 3, 1); hAx_mine(2)=subplot(1, 3, 2);hAx_mine(3)=subplot(1, 3, 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, hAx_mine(1)=subplot(1, 3, 1); hAx_mine(2)=subplot(1, 3, 2);hAx_mine(3)=subplot(1, 3, 3);
[x, y, button] = ginputc(1);
[Lia,Locb]=ismember(gca,hAx_mine);
disp(['Locb gives the subplot number that you have clicked: ' num2str(Locb)])
有一个选项可以让斧头作为 ginputc
的额外输出:
...
[x, y, button,ax] = ginputc(1);
[Lia,Locb]=ismember(ax,hAx_mine);
...
但这也不起作用。我想 ginputc
确实以某种方式改变了 gca
但经过几个小时的尝试,我还没有设法找到原因以及如何修复它。
但是...我没有放弃,而是专注于改进ginput
,而不是排序ginputc
。最初的目标是因为 ginput
很慢,所以为什么不尝试改进它呢?
在该函数中,当它处理新的 Matlab 工具栏时,您的速度很慢 setupFcn
。 setupFcn
所做的是禁用工具栏,因此当您使用 ginput
.
不过这个工具栏并不讨厌,为什么要隐藏它呢?所以我复制了 ginput
并将其重命名为 ginput_mine
,这样我就可以像下面这样对其进行更改:
- 我注释了从第 221 行(禁用 AxesToolbar)到第 232 行(12 行)的代码
- 我还在第 268 行(Restore axestoolbar)到第 271 行(4 行)
restoreFcn
评论了第二名
所做的是停止 ginput
以将 toolbarVisible
设置为关闭(并在 2. 中恢复工具栏)。这导致更快的功能。我还注意到它效果更好,因为它改进了我的点击记录,而不是遗漏了很多点击。
我不确定经过这种调和后,ginput
的所有功能是否仍然有效,但我认为是这样。我的工具是一个用于标记图像的注释界面,我很高兴为我的用户提供了更加流畅的界面:-)
2021 年 3 月 28 日更新: 根据 Cris 的评论,我认为我可以通过添加一个额外的步骤来改进我的解决方案。这个额外的步骤只有在你不再需要图中的工具栏时才有用。 你所做的是(使用上述解决方案)在 ginput 的开头或启动 ginput 之前添加 2 行,用 Fig 你的数字:
set(Fig, 'MenuBar', 'none')
set(Fig, 'ToolBar', 'none')
我可能会做得更快。