Matlab динамический график оси - PullRequest
0 голосов
/ 15 мая 2018

В данный момент я строю две точки в сетке и использую xlim и ylim для увеличения масштаба моего графика, например,

enter image description here

но мне бы хотелось иметь график, который динамически меняет ось в зависимости от того, где находится моя цель.Это потому, что моя красная точка может быть выше xlim и ylim или намного ниже ее, как эти два случая.

enter image description here enter image description here

В первом случае точка находится за пределами окна, и поэтому я не вижу ее, в то время как в другом случае точка находится близко к началу графика, и я хотел бы видеть ее более внимательноКак если бы я увеличил масштаб. Сейчас я использую

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

Я думаю, что для того, что мне нужно, я должен использовать x,y как-то вместо a или комбинацию двух вчтобы иметь более динамический диапазон в зависимости от размера x,y.Есть ли другой способ сделать это проще и быстрее?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я думаю, вы ищете команду 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

0 голосов
/ 15 мая 2018

Вы можете использовать ручки оси и изменять свойства XData и YData для динамического изменения пределов оси. Рассмотрим следующий пример кода, который отображает случайную точку данных и динамически обновляет пределы оси:

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
...