Для программной установки границ осей есть несколько полезных команд:
axis([0 30 0 8]); %Sets all four axis bounds
or
xlim([0 30]); %Sets x axis limits
ylim([0 8]); %Sets y axis limits
Чтобы установить только один из двух пределов x, я обычно использую такой код:
xlim([0 max(xlim)]); %Leaves upper x limit unchanged, sets lower x limit to 0
Это использует соглашение о вызове нулевого входного аргумента xlim
s, которое возвращает массив текущих пределов x. То же самое работает с ylim
.
Обратите внимание, что все эти команды применяются к текущей оси, поэтому, если вы создаете подграфики, вам нужно будет выполнить вызов масштабирования один раз для каждой оси при построении фигуры.
Еще одна полезная функция — это команда linkaxes
. Это динамически связывает пределы осей двух графиков, в том числе для программных команд изменения размера, таких как xlim
, и операций пользовательского интерфейса, таких как панорамирование и масштабирование. Например:
a(1) = subplot(211),plot(rand(10,1), rand(10,1)); %Store axis handles in "a" vector
a(2) = subplot(212),plot(rand(10,1), rand(10,1)): %
linkaxes(a, 'xy');
axis([0 30 0 8]); %Note that all axes are now adjusted together
%Also try some manual zoom, pan operations using the UI buttons.
Глядя на ваш код, пост-редактирование, использование вами функции plotmatrix
усложняет ситуацию. plotmatrix
создает свои собственные оси для работы, поэтому вам нужно захватить эти ручки и настроить их. (Кроме того, в будущем исключите h = zeros(..)
из цикла).
Чтобы получить дескрипторы созданных осей plotmatrix
, используйте второй возвращаемый аргумент, например: [~, hAxes]=plotmatrix(current_rpm,current_torque);
. Затем соберите их для дальнейшего использования.
Наконец, все команды axis
, xlim
, ylim
действуют на текущую ось (см. gca
). Однако оси plotmatrix
никогда не были текущими, поэтому команда axis
на них не влияла. Вы можете указать ось для действия, например: axis(hAxis, [0 30 0 8]);
.
Собрав все это вместе (добавив несколько определений переменных, чтобы заставить ваш код выполняться), вы получите вот как это выглядит:
%Define some dummy variables
current_rpm = rand(20,1)*30;
current_torque = rand(20,1)*8;
num_bins = 12;
%Loop to plot, collecting generated axis handles into "hAllAxes"
hAllAxes = [];
for i = 1:num_bins;
subplot(4,3,i);
[~, hCurrentAxes]=plotmatrix(current_rpm,current_torque);
hAllAxes = [hAllAxes hCurrentAxes]; %#ok
end
linkaxes(hAllAxes,'xy');
axis(hAllAxes,[0 30 0 8]);
person
Pursuit
schedule
21.03.2013