Matlab:当我放大 plotyy 图时,yTicks 不会自动更新

Matlab: When I zoom in a plotyy graph yTicks don't update automatically

如上所述,我想放大使用 plotyy 创建的图表。 当我这样做时,yTicks 不会更新到可见的新限制。 因此,如果您放大太多,可能会看不到任何 yTicks。 我找到了 ActionPostCallback 函数,但我没有让它工作,而 xTicks 很好。

代码:

figure, plotyy(1:10,1:2:20,1:10,1:0.5:5.5)

结果:

因为这种行为似乎没有出现在 'normal' plot 调用中,所以这看起来像是 plotyy 创建轴对象的内部错误。作为一种替代方法,您可以将多个轴堆叠在一起,从而利用 'default'(找不到更好的词)缩放行为。这种方法还允许您独立地完全控制两个轴的行为,并避免 plotyy.

看似很多的缺点

我稍微改编了 one of my previous answers 作为这种情况的例子。

% Sample data
x = 1:10;
y1 = 1:2:20;
y2 = 1:0.5:5.5;

% Create axes & store handles
h.myfig = figure;
h.ax1 = axes('Parent', h.myfig, 'Box', 'off');

if ~verLessThan('MATLAB', '8.4')
    % MATLAB R2014b and newer
    h.ax2 = axes('Parent', h.myfig, 'Position', h.ax1.Position, 'Color', 'none', 'YAxisLocation', 'Right');
else
    % MATLAB 2014a and older
    ax1position = get(h.ax1, 'Position');
    h.ax2 = axes('Parent', h.myfig, 'Position', ax1position, 'Color', 'none', 'YAxisLocation', 'Right');
end

% Preserve axes formatting
hold(h.ax1, 'on');
hold(h.ax2, 'on');

% Plot data
plot(h.ax1, x, y1, 'b');
plot(h.ax2, x, y2, 'g');

linkaxes([h.ax1, h.ax2], 'x');

和示例图片:

请注意,我只 link 编辑了 x,但您可以 link xy 轴与 linkaxes打电话。

您可能希望将 YTickMode 属性 设置为 auto

h = plotyy(1:10,1:2:20,1:10,1:0.5:5.5)
set(h, 'YTickMode','Auto')

完整代码:

figure

subplot(121)
h1 = plotyy(1:10,1:2:20,1:10,1:0.5:5.5)
title('Original')

subplot(122)
h2 = plotyy(1:10,1:2:20,1:10,1:0.5:5.5)
title('Zoom')
set(h2, 'YTickMode','Auto')

出于某种原因,plotyy 默认将轴的 'Ytickmode' 设置为手动。

由于 plotyy 为两个数据集创建了 2 组轴,每个轴的设置 'Ytickmode' 应该可以解决这个问题。

这可以通过

AX=plotyy(...) %this will create an axis with 2 elements one for each axis
AX(1).YTickMode='auto';
AX(2).YTickMode='auto';