MATLAB - Как увеличить масштаб сюжета вместе?

43

У меня есть несколько подзаговоров на одной фигуре. Ось X каждого графика имеет одинаковую переменную (время). Ось Y на каждом графике отличается (как в том, что она представляет, так и в величине данных).

Я бы хотел, чтобы увеличить масштаб времени на всех графиках одновременно. В идеале, используя инструмент прямоугольного масштабирования на одном из графиков, а остальные графики меняют свои пределы X соответственно. Пределы Y должны оставаться неизменными для всего этого. Автоматическое подгонка данных для заполнения графика в направлении Y приемлемо.

(Этот вопрос почти идентичен вопросу о переполнении стека один Matplotlib/Pyplot: как увеличить подзаголовки вместе? (за исключением MATLAB))

  • 1
    решение этого вопроса также применимо (используя встроенную функцию LINKAXES ): stackoverflow.com/questions/5018310/…
Теги:
plot
zoom

3 ответа

40
Лучший ответ

Используйте встроенную функцию linkaxes следующим образом:

linkaxes([hAxes1,hAxes2,hAxes3], 'x');

Для более продвинутой компоновки (а не только осей x или y) используйте встроенную функцию linkprop

24

Используйте 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.

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

  • 0
    Спасибо! это прекрасно работает
0

Чтобы связать пару фигур с linkaxes, используйте:

figure;imagesc(data1);
f1h=findobj(gcf,,’type’,’axes’)
figure;imagesc(data2);
f2h=findobj(gcf,,’type’,’axes’)
linkaxes([f1h,f2h],’xy’)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню