Matlab:当我缩放plotyy图时,y轴刻度不会自动更新

4
如上所述,我想放大使用plotyy创建的图表。 当我这样做时,yTicks不会更新为可见的新限制。 因此,如果你缩放太多,可能就看不到任何yTicks了。 我找到了ActionPostCallback函数,但是我无法使其工作,而xTicks则正常。
代码:
figure, plotyy(1:10,1:2:20,1:10,1:0.5:5.5)

结果如下:

输入图像描述


编辑了我的第一篇帖子。 - TAK
3个回答

4
您可能需要将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 的第一个输出来获取和使用轴句柄,gca 只会修改其中一个轴。 - sco1
这只适用于一侧,但是是的,这是潜在的问题。 - nivag
没错 - 我刚看到了!编辑应该可以解决。谢谢。 - marsei
“findall” 真的不是做那件事情的最佳方式。如果他们有其他数字怎么办? - sco1
就像我说的那样,plotyy 的第一个输出会给你那个组。 - sco1
显示剩余2条评论

3
因为这种行为在“普通”plot调用中似乎不存在,所以这看起来像是由plotyy创建轴对象的内部错误。作为一种替代方案,您可以将多个轴叠放在一起,从而利用“默认”的缩放行为(缺乏更好的单词)。这种方法还允许您完全独立地控制两个轴的行为,并避免plotyy的许多缺陷。
我稍微修改了之前回答中的一个示例来说明这种情况。
% 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');

以下是示例图片:

yay

请注意,我只连接了 x 轴,但您可以使用 linkaxes 呼叫来连接 xy 轴。


2

由于某种原因,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';

1
哈,不错 - 就是这个! - marsei
这个解决方案对我来说最好,因为我的图中有子图。非常感谢。 - TAK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接