web-dev-qa-db-fra.com

MATLAB - Comment zoomer ensemble les sous-parcelles?

J'ai plusieurs sous-intrigues dans une figure. L'axe X de chaque tracé est la même variable (temps). L'axe des Y sur chaque graphique est différent (à la fois dans ce qu'il représente et dans l'ampleur des données).

Je voudrais un moyen de zoomer sur l'échelle de temps sur 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 pour tout cela. L'ajustement automatique des données pour remplir le tracé dans la direction Y est acceptable.

(Cette question est presque identique à la première question de Stack Overflow Matplotlib/Pyplot: comment zoomer ensemble les sous-tracés? (sauf pour - MATLAB ))

47
Miebster

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

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

Pour une liaison plus avancée (pas seulement les axes x ou y), utilisez la fonction intégrée linkprop

44
Yair Altman

Utilisez linkaxes comme Yair et Amro l'ont déjà suggéré. 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 simultanément sur toutes les sous-parcelles

S'il y a beaucoup de sous-tracés, et que la collecte de leur poignée d'axes un par un ne semble pas une manière intelligente de faire le travail, vous pouvez trouver toutes les poignées d'axes dans la poignée de figure donnée par 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 balise vide (''). La condition de la balise vide est d'exclure les poignées de hache des légendes, dont la balise sera legend.

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

28
YYC

Pour lier 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’)
0
razapor