【问题标题】:Matlab : Pan a figure programmaticallyMatlab:以编程方式平移图形
【发布时间】:2017-04-04 06:37:31
【问题描述】:

我一直在绘制一些数字,我想在某些区域放大多次保存它们。除了最后一个视图之外,我所有的视图都有 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...

【问题讨论】:

  • set(gca, 'YLim', get(gca, 'YLim')+dy) 有什么问题?
  • 这非常完美!非常感谢...为什么我没有想到获取当前的 'ylims' 并更改并添加 y 的更改。

标签: matlab figure pan


【解决方案1】:

没有这样的“平移”命令。 (有一个pan 命令,但这只是打开或关闭使用鼠标平移的能力)。

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

例如axis([ xmin, xmax, ymin, ymax ]);

此外,如果您在影响形状/纵横比的任何其他 axis 调用(例如 axis squareaxis 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模式(即适应轴大小)。

【讨论】:

    【解决方案2】:

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

    要“平移”,您需要更改两个限制而不更改它们的间隔。由于您可以使用

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

    您可以使用以下命令将 y 轴平移一段距离dy

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

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 2015-05-10
      • 1970-01-01
      相关资源
      最近更新 更多