установка минимальных и максимальных значений оси для фиксации

У меня есть подзаголовок (3,4), каждый из которых показывает диаграммы рассеяния. Диапазоны диаграмм рассеяния различаются, поэтому некоторые из моих графиков имеют оси x (0–30) и y (0–8), а некоторые — x (18–22) и y (4–7). Я установил свой xlim на [0 30], а ylim на [0 8], но это настраивает мои оси так, чтобы они никогда не опускались ниже 0, выше 30 и т. д.

Как мне установить мою ось на «прилипание» к (0,0) для начала каждого графика и «прилипание» к 8 для Y и 30 для X.

ТИА за любую помощь


обновление за комментарий к ответу:
Все еще возникает та же проблема с приведенным ниже кодом

%% plot

for i = 1:num_bins;

h = zeros(ceil(num_bins),1);

h(i)=subplot(4,3,i);

plotmatrix(current_rpm,current_torque)

end

linkaxes(h,'xy');

axis([0 30 0 8]);

person mallow    schedule 21.03.2013    source источник


Ответы (1)


Для программной установки границ осей есть несколько полезных команд:

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

Это использует соглашение о вызове нулевого входного аргумента xlims, которое возвращает массив текущих пределов 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
comment
Спасибо за ответ. Я уже пробовал это, но это просто устанавливает минимальное значение x равным 0, но я все еще получаю графики, где ось x находится в диапазоне 18-22. Мне нужно, чтобы все мои сюжеты были в одном масштабе. Есть идеи? - person mallow; 21.03.2013
comment
Убедитесь, что вы установили ось после построения ваших данных. - person Molly; 21.03.2013
comment
Добавлены некоторые обновления. Я подозреваю, что linkaxes действительно то, что вам нужно. - person Pursuit; 21.03.2013
comment
чтобы добавить путаницы, подзаговоры вызываются в цикле for, поэтому оси ссылок здесь не будут работать: for i = 1:num_bins; h = нули (ceil (num_bins), 1); ч (я) = подучасток (4,3, я); plotmatrix(current_rpm,current_torque) xlim([0 max(xlim)]); ylim([0 макс(ylim)]); конец - person mallow; 21.03.2013
comment
Почему нельзя поставить linkaxes(h,'xy'); сразу после цикла? - person Pursuit; 21.03.2013
comment
Все равно не получится. Получение разных масштабов. См. выше код - person mallow; 21.03.2013