matlab - 以与 Ginput 相同的方式从 Ginputc 获取子图号(以更快的 Ginput 回答)
问题描述
我正在尝试用 fileexchange 上的函数替换该函数ginput
:ginputc
来自
Jiro 的自定义 GINPUT。我发现ginput
第一次调用时启动速度很慢。ginputc
是比较快的。
我正在使用的一项功能ginput
无法复制ginputc
。当鼠标点击它时,我得到了子图号。
此处对此进行了解释ginput
:
get-subplot-number-from-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
但经过几个小时的尝试,我还没有找到原因以及如何解决它。
解决方案
但是...我没有放弃,而是ginputc
专注于改进ginput
而不是排序。最初的目标是因为ginput
速度很慢,所以为什么不尝试改进它呢?
在那个函数中setupFcn
,当它处理新的 Matlab 工具栏时,你有一个慢的。什么setupFcn
是禁用工具栏,以便在您使用ginput
.
然而,这个工具栏并不是很烦人,为什么要隐藏它呢?所以我复制并重命名ginput
为ginput_mine
,所以我可以对其进行如下更改:
- 我注释了从第 221 行(禁用 AxesToolbar)到第 232 行(12 行)的代码
- 我还在第 268 行(恢复轴工具栏)中评论了第二名,
restoreFcn
直到第 271 行(4 行)
这样做是停止ginput
设置toolbarVisible
为关闭(并在 2. 恢复工具栏)。这导致更快的功能。我还注意到它的效果更好,因为它改善了我的点击记录,而不是丢失了很多点击。
我不确定,通过这种锻炼,所有功能ginput
是否仍然有效,但我会假设是这样。我的工具是一个标注图像的注释界面,我很高兴为我的用户让它变得更加流畅 :-)
2021 年 3 月 28 日更新: 根据 Cris 的评论,我想我可以通过添加一个额外的步骤来改进我的解决方案。仅当您不再需要图中的工具栏时,此额外步骤才有用。您所做的是(使用上述解决方案)在 ginput 的开头或在启动 ginput 之前添加 2 行,用 Fig 你的图:
set(Fig, 'MenuBar', 'none')
set(Fig, 'ToolBar', 'none')
我可能会做得更快。
推荐阅读
- python - 这段代码有什么问题?只能连接 str
- html - 标题轮播未显示
- facebook-graph-api - (#100)尝试访问节点类型(用户)上不存在的字段(消息)
- r - 根据R中另一个的行和列对矩阵进行排序
- javascript - 在纯 JavaScript 中检查连接性的最佳方法是什么?
- python - 使用 Paho Mqtt 客户端在 on_message 中发布不工作
- java - Selenium Java 比较不正确?
- mysql - 如何在 mysql 中使用动态日期组合 2 个查询?
- docker - 从 Docker 容器连接到主机上的 PubSub 模拟器
- python - 从字符串中删除任何撇号 - Python Pandas