当寡妇调整大小时,不会触发 MATLAB 图形事件侦听器



版本: Matlab R2014b

XY 问题免责声明:我的目标是使用某个自定义函数在我的图形中制作 MATLAB 格式的刻度,该函数将刻度位置作为参数并输出一个字符串。默认刻度放置是可以的,但我想控制标签。在即时报价更改时未能执行回调函数会导致错误标记的即时报价。

下面的 MWE 显示了回调的虚拟版本;实际回调将刻度标签设置为

tick_formatter = @(tv)([sprintf('%1.2f',tv/10^N) 'e' num2str(N)])

(其中 tv 是以 X 单位表示的刻度值(。(这是 R2015b 及以下版本ax.XAxis.Exponent的粗略替代品,请参阅 https://fr.mathworks.com/matlabcentral/answers/275054-change-multiple-exponent-on-x-axis(

实际问题:

我希望能够在每次刻度变化(即它们的数量或 y 值变化(时做"某事"(在我的例子中重新计算刻度标签(。为此,我看了看addlistener但我无法让它按照我的意愿工作。

理想情况下,我会将侦听器放在XTick属性上,但它似乎无法正常工作。当XTickModeauto上时,放大和缩小(以编程方式xlim()或手动(或调整图形窗口的大小将导致即时报价的数量/位置发生变化,从而改变get(ax,'XTick')返回的值,但它不会触发这样的事件侦听器。

对于放大/缩小,解决方法是监听XLim,这确实会触发事件;但我发现没有这样的解决方法来调整图形窗口大小(至少在轴对象级别使用侦听器(。

欢迎任何建议。

水利环境:

% generate figure
x = 0:100;
y = x.^2;
figure(1)
clf() % ensure we cleared out previous tests
plot(x,y)
ax = gca();
% This event listener does nothing as you zoom in/out or resize the graphic
% window, even though XTick does change; it will only respond to explicit
% commands e.g. set(ax, 'XTick', ...). 
listen_to_XTick = addlistener(ax, 'XTick', 'PostSet',@(src,evn) disp('XTick changed'));
% This event listener responds to zooming in/out, but not to window
% resizing
listen_to_XLim = addlistener(ax, 'XLim', 'PostSet',@(src,evn) disp('XLim changed'));
% Play a bit with the figure, zoom in/out, resize the graphics window etc.
% -> only listen_to_XLim ever gets triggered, never listen_to_XTick
% Other properties that do not seem to ever trigger as window is resized:
% 'XTick', 'XTickLabel', 'Position'

如果您想在调整图形窗口大小时更改刻度标签,则可以使用图形窗口本身的SizeChangedFcn回调。尝试:

f = figure('SizeChangedFcn',@(src,evn) disp('Window resized'))

最新更新