版本: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
属性上放置一个侦听器,但是它似乎无法正常工作。当XTickMode
处于auto
上时,放大和缩小(通过xlim()
或手动进行缩放)或调整图形窗口的大小将导致刻度的数量/位置发生变化,从而改变刻度get(ax,'XTick')
返回的值,但不会触发这样的事件侦听器。
要放大/缩小,一种解决方法是改为监听XLim
,这确实会触发事件。但是我发现没有这样的解决方法来调整图形窗口的大小(至少在轴对象级别使用侦听器)。
欢迎提出任何建议。
MWE :
% 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'
答案 0 :(得分:0)
如果在调整图形窗口大小时想要更改刻度标签,则可以使用figure窗口本身的SizeChangedFcn
回调。试试:
f = figure('SizeChangedFcn',@(src,evn) disp('Window resized'))