Matlab动态绘图轴

时间:2018-05-15 17:01:13

标签: matlab axis figure

目前我正在绘制一个网格中的两个点,我正在使用xlimylim来强制我的情节比例,就像这样

enter image description here

但是我希望有一个根据我的目标在哪里动态改变轴的情节。这是因为我的红点可能高于xlimylim或低于它,就像这两种情况一样。

enter image description here enter image description here

在第一个中,该点位于窗口之外,因此我无法看到它,而在另一种情况下,该点接近于该绘图的原点,我希望更接近地看到它,就像是我放大了。 现在我正在使用

plot(x,y,'.','MarkerSize',20,'Color','r');
xlim([-a a]);
ylim([-a a]);

我认为为了做我需要的事情,我应该使用x,y而不是a或两者的组合,以便根据{{1 }}。 还有其他更简单快捷的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用轴控制柄并更改XDataYData属性以动态更改轴限制。请考虑以下示例代码,该代码绘制随机数据点并动态更新轴限制

h = figure;
% get axis handle
ax = gca(h);
set(ax, {'XLim', 'YLim'}, {[-1 1], [-1 1]});

XY = [];

for i = 1:100
    % generate random data point
    xy = 2*randn(1, 2);
    XY = cat(1, XY, xy);

    % get min and max values of points so far
    minVals = min(XY, [], 1);
    maxVals = max(XY, [], 1);

    % plot the data point
    scatter(xy(1), xy(2), 'b*');
    hold on;

    % update the axis limits dynamically
    set(ax, {'XLim', 'YLim'}, {[minVals(1)-1 maxVals(1)+1], [minVals(2)-1 maxVals(2)+1]});
    % pause so that you can see the plot update
    pause(0.5);
end

答案 1 :(得分:0)

我认为您正在寻找axis tight命令。根据文档,它的作用是

  

通过将轴限制设置为等于数据范围,将轴框紧紧围绕数据安装。

     

...

     

限制自动更新以合并添加到轴的新数据。要在使用hold on时不要更改限制,请使用axis tight manual

以下是演示:

y = randi(21,10,1)-11;
figure(); hP = plot(NaN(10,1),NaN(10,1),'-o'); axis tight; grid minor;
for ind1 = 1:numel(x)
  hP.XData(ind1) = x(ind1);
  hP.YData(ind1) = y(ind1);
  pause(0.5);
end

注意轴限制如何自动更改:

Demonstration