MATLAB - comment zoomer sur des sous-lots ensemble?

j'ai plusieurs sous-lots dans un chiffre. L'axe des X de chaque parcelle est la même variable (temps). L'axe des Y sur chaque placette est différent (à la fois dans ce qu'il représente et dans la grandeur 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 zoom rectangle sur l'une des placettes, et en demandant aux autres placettes de changer leurs limites de X en conséquence. Les limites de Y devraient demeurer inchangées pour tout cela. Auto l'ajustement des données pour remplir le graphique dans la direction Y est acceptable.

(cette question est presque identique à la question Numéro un Matplotlib/Pyplot: comment zoomer les sous-lots ensemble? (sauf MATLAB )

46
demandé sur Community 2011-02-17 01:42:53

3 réponses

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 function

43
répondu Yair Altman 2011-02-19 17:12:56

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 dans tous les sous-lots simultanément

S'il y a beaucoup de sous-lots, et la collecte de leurs axes manier un par un ne semble pas une façon intelligente de faire le travail, vous pouvez trouver tous les axes manier dans le chiffre donné manier 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 étiquette vide ("). L'état de la balise vide est d'exclure l'axe des poignées de légendes, dont l'étiquette sera legend .

il pourrait 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 axes des poignées des parcelles qui vous intéressent.

26
répondu YYC 2011-02-18 00:10:16

pour lier une paire de figures avec linkaxes utiliser:

figure;imagesc(data1);
f1h=findobj(gcf,,’type’,’axes’)
figure;imagesc(data2);
f2h=findobj(gcf,,’type’,’axes’)
linkaxes([f1h,f2h],’xy’)
0
répondu razapor 2016-12-08 03:23:17