Масштабирование осей Matlab - PullRequest
       31

Масштабирование осей Matlab

8 голосов
/ 03 ноября 2010

как точно вы получаете фиксированное масштабирование осей на графике Matlab при построении внутри цикла?Моя цель - увидеть, как развиваются данные внутри цикла.Я попытался использовать axis manual и axis(...) без удачи.Любые предложения?

Я знаю, hold on добивается цели, но я не хочу видеть старые данные.

Ответы [ 2 ]

6 голосов
/ 03 ноября 2010

Если вы хотите, чтобы ваши новые построенные данные заменили старые построенные данные, но сохранили те же пределы осей, вы можете обновить значения x и y построенных данных, используя команду SET в вашем цикле.,Вот простой пример:

hAxes = axes;                     %# Create a set of axes
hData = plot(hAxes,nan,nan,'*');  %# Initialize a plot object (NaN values will
                                  %#   keep it from being displayed for now)
axis(hAxes,[0 2 0 4]);            %# Fix your axes limits, with x going from 0
                                  %#   to 2 and y going from 0 to 4
for iLoop = 1:200                 %# Loop 100 times
  set(hData,'XData',2*rand,...    %# Set the XData and YData of your plot object
            'YData',4*rand);      %#   to random values in the axes range
  drawnow                         %# Force the graphics to update
end

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

1 голос
/ 03 ноября 2010

Вы должны установить пределы осей;в идеале вы делаете это перед запуском цикла.

Это не будет работать

x=1:10;y=ones(size(x)); %# create some data
figure,hold on,ah=gca; %# make figure, set hold state to on
for i=1:5,
   %# use plot with axis handle 
   %# so that it always plots into the right figure
   plot(ah,x+i,y*i); 
end

Это будет работать

x=1:10;y=ones(size(x)); %# create some data
figure,hold on,ah=gca; %# make figure, set hold state to on
xlim([0,10]),ylim([0,6]) %# set the limits before you start plotting
for i=1:5,
   %# use plot with axis handle 
   %# so that it always plots into the right figure
   plot(ah,x+i,y*i); 
end
...