У меня есть несколько подзаговоров на одной фигуре. Ось X каждого графика имеет одинаковую переменную (время). Ось Y на каждом графике отличается (как в том, что она представляет, так и в величине данных).
Я бы хотел, чтобы увеличить масштаб времени на всех графиках одновременно. В идеале, используя инструмент прямоугольного масштабирования на одном из графиков, а остальные графики меняют свои пределы X соответственно. Пределы Y должны оставаться неизменными для всего этого. Автоматическое подгонка данных для заполнения графика в направлении Y приемлемо.
(Этот вопрос почти идентичен вопросу о переполнении стека один Matplotlib/Pyplot: как увеличить подзаголовки вместе? (за исключением MATLAB))
Используйте linkaxes
, как уже предлагали Яир и Амро. Ниже приведен краткий пример вашего случая.
ha(1) = subplot(2,1,1); % get the axes handle when you create the subplot
plot([1:10]); % Plot random stuff here as an example
ha(2) = subplot(2,1,2); % get the axes handle when you create the subplot
plot([1:10]+10); % Plot random stuff here as an example
linkaxes(ha, 'x'); % Link all axes in x
Вы должны иметь возможность масштабировать все подзадачи одновременно
Если есть много подзаговоров, и сбор их осей один за другим не кажется разумным способом выполнения задания, вы можете найти все дескрипторы осей в заданном значении с помощью следующих команд
figure_handle = figure;
subplot(2,1,1);
plot([1:10]);
subplot(2,1,2);
plot([1:10]+10);
% find all axes handle of type 'axes' and empty tag
all_ha = findobj( figure_handle, 'type', 'axes', 'tag', '' );
linkaxes( all_ha, 'x' );
Первая строка находит все объекты под figure_handle
типа "оси" и пустой тег (''). Условие пустого тега состоит в том, чтобы исключить рукописи топора легенд, тег которых будет legend
.
В вашей фигуре могут быть другие объекты осей, если это больше, чем просто простой сюжет. В этом случае вам нужно добавить дополнительные условия для идентификации ручек осей на интересующих вас страницах.
Чтобы связать пару фигур с linkaxes, используйте:
figure;imagesc(data1);
f1h=findobj(gcf,,’type’,’axes’)
figure;imagesc(data2);
f2h=findobj(gcf,,’type’,’axes’)
linkaxes([f1h,f2h],’xy’)