Matlab:以编程方式平移图形

时间:2016-11-20 23:03:37

标签: matlab figure pan

我一直在策划一些数字,我想在某些区域进行多次保存。我的所有视图都在y = 0处具有枢轴点,除了一个,即最后一个视图。我一直在使用' XLim'更改X轴上的视图。现在我需要在Y轴上平移视图。使用YLim时,图像的宽高比会发生变化。

是否可以在Y轴上设置一些轴心点?

这是一个可以看到我的问题的最低工作代码。暂停2次。

f1 = figure(10);
hold on
axis equal
x = linspace(1,2*pi);
y = sin(x);
plot(x,y,'*')
xlims=[0 2*pi; 1 2*pi; 0.5 1.5];

for i = 1:size(xlims,1)
    set(gca,'XLim',xlims(i,:))
    disp('Here I am saving this view! (Paused)')
    pause
end

% Now I want to PAN the Y axis and set the view around Y = 1.
% But still keep last set Xlims AND keep the aspect ratio of figure.
% When using YLim, the aspect ratio changes.

set(gca,'YLim',[0.9 1.1]) % Not what I have in mind.
% Just need to pivot Y=1...

2 个答案:

答案 0 :(得分:0)

没有"平移"如此命令。 (有一个pan命令,但这只是切换使用鼠标开启或关闭平移的能力。)

但是,您可以设置轴限制,使用axis函数指定要使用手动指定限制显示图表的哪个部分。

e.g。 axis([ xmin, xmax, ymin, ymax ]);

此外,如果您在影响形状/宽高比(例如axisaxis square)的任何其他axis equal调用之后应用此项,则会保留这些调用。

请注意,在您的特定示例中,使用axis equal因此必然意味着对于较小范围的Y,您的宽高比会更小。因此,您可以选择反对。

或者,您也可以使用daspect功能手动控制宽高比。例如,在你的例子中:

>> axis equal  % your initial axis / aspect ratio situation
>> A = axis;
>> axis([0.5,1.5,0.9,1.1]); % your new values. aspect ratio will change to preserve equality
>> B = axis;
>> Y_factor = (A(4)-A(3))/(B(4)-B(3));
>> daspect([Y_factor, 1, 1]);  % back to the old "aspect ratio"

然而,这显然意味着两个轴现在不等于",并且与之前的图形的比较可能会产生误导。这可能是也可能不是要考虑的因素。

最后,如果您真正想要的只是确保您的轴对象不会改变大小,您可以手动设置轴对象的大小(例如set(gca, 'position', [x,y,x_width, y_width]))并确保轴是在normal模式下(即适应轴大小)。

答案 1 :(得分:0)

@jodag在评论中给出的答案是完美的。由于评论趋向于消失,我想我会在这里复制它。

要“平移”,您需要更改两个限制而不更改其间隔。因为您可以使用

读取当前间隔
get(gca, 'YLim')

您只需使用以下命令即可将y轴平移dy

set(gca, 'YLim', get(gca, 'YLim')+dy)