xlim侦听器放大重置和linkaxes奇怪的行为

23日视图(30天)
我附加的XLim侦听器一个坐标轴对象。
我之前使用一个计时器由于问题抓住适当的事件(原因我不能完全记得)。现在他们开始回到我身边…
这里有一些基本的测试代码(2017 b):
甘氨胆酸ax =;
情节(1:10 0)
L1 = addlistener (ax,“XLim”,“PostSet”@ (x, y) disp (y.AffectedObject.XLim));
当我放大侦听器火灾正确。然而,当我双击重置放大(或右击和重置)没有侦听器被解雇了!XLim的属性显然改变了但Matlab似乎并不介意告诉我这个事实。
这对我来说似乎是一个错误。看这是一个建议,我听变焦的回调,但我宁愿不碰任何回调,因为我可能需要2个或更多的回调一个轴。
更令人吃惊的是,通过连接轴调整变焦现在触发一个事件。这似乎坚持即使我关闭连接。
clf
甘氨胆酸ax =;
情节(1:10 0)
L1 = addlistener (ax,“XLim”,“PostSet”@ (x, y) disp (y.AffectedObject.XLim));
linkaxes (ax,“x”)%复位工作
linkaxes (ax,“x”,“关闭”)%重置仍是期望的
问题是:
  1. 我怎样才能得到一个侦听器事件放大重置(和潘重置)抗意外覆盖(即最有可能避免一个回调属性)
  2. 如果这种行为不是一个错误,为什么呢?请参见下面的评论博文。
  3. 为什么运行linkaxes解决这个问题?
  4. 有一种完成linkaxes函数做的事情不需要修改linkaxes轴的行为?
下面的博客想到但似乎reset-zoom应该触发事件。在链接的例子策划新数据,扩展了x-limits不抛出事件。 https://blogs.mathworks.com/loren/2015/12/14/axes-limits-scream-louder-i-cant-hear-you/
更新:
如果你再阴谋事件停止把扔在重置变焦。¯\ _(ツ)_ /¯
clf
甘氨胆酸ax =;
情节(1:10 0)
L1 = addlistener (ax,“XLim”,“PostSet”@ (x, y) disp (y.AffectedObject.XLim));
linkaxes (ax,“x”)
linkaxes (ax,“x”,“关闭”)
情节(1:10 0)%根据需要重置不工作

接受的答案

吉姆Hokanson
吉姆Hokanson 2017年11月27日
编辑:吉姆Hokanson 2017年11月27日
事实证明,有很多linkaxes背后公开可读的代码,或者真的,linkprop。一些调试后我发现MarkedClean事件。可以找到更多的信息关于这个有趣的活动: https://undocumentedmatlab.com/blog/undocumented-hg2-graphics-events
我现在有以下代码:
%更新为指向XRuler而不是axes_handle
% /实验后的建议
obj。L3 =
addlistener (axes_handle.XRuler,“MarkedClean”@ (~ ~)obj.cleanListen);
结束
函数cleanListen (obj)
如果isequal (obj.xlim get (obj.axes_handle,“XLim”))
返回
结束
obj.listenerCallback ();
似乎MarkedClean也许是一个终极总是告诉我事情的事件。
我不能完全确定我的问题的答案是什么,但这是一个体面的解决方案为我所需要的东西。
3评论

登录置评。

答案(1)

亚当Danz
亚当Danz 2021年4月15日
从r2021a开始,你可以提供一个 LimitsChangedFcn 函数的x轴(或任何的x / y / z轴)。这个回调函数克服了问题描述XLim改变事件监听器。
具体来说, LimitsChangedFcn 克服了OP提到的问题: “当我双击重置放大(或右击和重置)没有侦听器被解雇了!”

类别

找到更多的在图形性能帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!