48 votes

MATLAB - Comment zoomer sur des sous-graphes ensemble ?

J'ai plusieurs intrigues secondaires dans un seul personnage. L'axe X de chaque graphique est la même variable (temps). L'axe Y de chaque graphique est différent (à la fois dans ce qu'il représente et dans l'ampleur des données).

J'aimerais pouvoir zoomer sur l'échelle de temps de toutes les parcelles simultanément. Idéalement, en utilisant l'outil de zoom rectangle sur l'un des tracés, et en faisant en sorte que les autres tracés modifient leurs limites X en conséquence. Les limites Y devraient rester inchangées pendant tout ce temps. L'ajustement automatique des données pour remplir le graphique dans la direction Y est acceptable.

(Cette question est presque identique à la question 1 de Stack Overflow. Matplotlib/Pyplot : Comment zoomer sur des sous-plots ensemble ? (à l'exception des MATLAB ))

45voto

Yair Altman Points 4091

Utiliser la fonction intégrée linkaxes comme suit :

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

Pour des liens plus avancés (pas seulement pour les axes x ou y), utilisez la fonction intégrée linkprop fonction

29voto

YYC Points 957

Utilisation linkaxes comme l'ont déjà suggéré Yair et Amro. Voici un exemple rapide pour votre cas

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

Vous devriez pouvoir zoomer sur toutes les intrigues secondaires simultanément

S'il y a beaucoup de sous-intrigues et que la collecte de leurs axes un par un ne semble pas être une façon intelligente de faire le travail, vous pouvez trouver tous les axes de l'axe de la figure donnée en utilisant les commandes suivantes

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' );

La première ligne trouve tous les objets sous figure_handle de type "axes" et de balise vide (''). La condition de la balise vide est d'exclure les manches de haches de légendes, dont la balise sera legend .

Il peut y avoir d'autres objets d'axe dans votre figure si elle est plus qu'un simple tracé. Dans ce cas, vous devez ajouter d'autres conditions pour identifier les poignées d'axes des tracés qui vous intéressent.

0voto

razapor Points 1

Pour relier une paire de figures avec des axes de liaison, utilisez :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X