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 x
和 y
轴与 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';
如上所述,我想放大使用 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 x
和 y
轴与 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';