Matlab:以编程方式平移图形

Matlab:以编程方式平移图形,matlab,figure,pan,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

我已经绘制了一些图形,我想保存它们在某些区域放大多次。除最后一个视图外,所有视图的轴点都位于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...
没有这样的“平移”命令。(有一个
pan
命令,但这只是打开或关闭鼠标来切换平移功能)

但是,可以使用
axis
功能,通过手动指定的限制,设置轴限制,指示要显示的绘图部分

e、 g.
轴([xmin,xmax,ymin,ymax])

此外,如果在影响形状/纵横比的任何其他
axis
调用(例如
axis square
axis equal
)之后应用此选项,则这些选项将被保留

请注意,在您的特定示例中,使用轴相等必然意味着
Y
范围越小,纵横比越小。因此,你可能会选择反对

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

>> 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"
然而,这显然意味着这两个轴现在并不“相等”,与以前的图表进行比较可能会产生误导。这可能是也可能不是一个需要考虑的因素


最后,如果您真正想要的只是确保您的axis对象不改变大小,您可以简单地手动设置axis对象的大小(例如
设置(gca,'position',[x,y,x_width,y_width])
),并确保axis处于
正常模式(即适应轴大小).

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

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

get(gca, 'YLim')
您可以使用以下命令简单地平移y轴一段距离
dy

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

set(gca,'YLim',get(gca,'YLim')+dy)有什么问题?
?这工作非常完美!非常感谢你。。。为什么我没有想到得到当前的“ylims”和更改,并添加y的更改。