2011-02-16 17 views
43

Tengo múltiples subtramas en una figura. El eje X de cada trazado es la misma variable (tiempo). El eje Y en cada trama es diferente (tanto en lo que representa como en la magnitud de los datos).MATLAB - ¿Cómo acercar las subtramas?

Me gustaría una forma de acercar la escala de tiempo en todos los gráficos simultáneamente. Lo ideal sería utilizar la herramienta de zoom rectangular en uno de los trazados y hacer que los otros trazados cambien sus límites X en consecuencia. Los límites Y deben permanecer sin cambios para todo esto. Ajustar automáticamente los datos para completar el trazado en la dirección Y es aceptable.

(Esta pregunta es casi idéntica a la pila pregunta desbordamiento de una Matplotlib/Pyplot: How to zoom subplots together? (a excepción de MATLAB))

+1

la solución de esta cuestión se aplica como bien (usando la función incorporada ** LINKAXES **): http://stackoverflow.com/questions/5018310/creating-several-boxplots-with-the-same-scale-in-matlab/5018523#5018523 – Amro

Respuesta

42

Utilice el built-in linkaxes función como sigue:

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

para vincular más avanzada (no solo los ejes xoy), use la función incorporada linkprop

25

Use linkaxes como Yair y Amro ya lo sugirió. Lo que sigue es un ejemplo rápido para su caso

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 

Usted debe ser capaz de acercar todas las subtramas simultáneamente

Si hay muchos argumentos secundarios, y la recolección de sus ejes manejan uno por uno, no parece una forma inteligente para hacer el trabajo, usted puede encontrar todos los ejes manejan en el mango cifra dada por los siguientes comandos

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 primera línea busca todos los objetos bajo figure_handle del tipo "ejes" y etiqueta vacía (''). La condición de la etiqueta vacía es excluir los controladores de hacha de las leyendas, cuya etiqueta será legend.

Puede haber otros objetos de ejes en su figura si se trata de algo más que un simple trazado. En tal caso, es necesario agregar más condiciones para identificar los ejes de las manijas de las parcelas que le interesan

+0

gracias! esto funciona muy bien – portforwardpodcast

0

Para vincular un par de figuras con linkaxes usar:.

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