2012-05-18 6 views
10

Digamos que tenemos una subtrama de 1 por 2 y trazamos algunos gráficos en el interior de la siguiente manera:Cómo mantener la subtrama tamaños sin cambios después de poner una barra de colores

subplot(1,2,1) 
surf(peaks(20)) 

subplot(1,2,2) 
surf(peaks(20)) 

enter image description here

Y luego quiere poner una barra de colores:

colorbar 

enter image description here

Pongo No quiero que se rompa la figura correcta como en el resultado. ¿Cómo podemos colocar la barra de colores fuera de la figura de la derecha en una fila de subtramas y mantener los tamaños de las mismas sin cambios?

Nota: En realidad, lo necesito para trazar imágenes donde la barra de colores es común y quiero ponerla a la derecha. Usé este ejemplo de juguete por simplicidad.

Respuesta

13

Puede extraer la posición de la primera gráfica y usarla en la segunda. MATLAB mueve automáticamente la barra de colores hacia la derecha al volver a escalar.

f1=figure(1);clf; 
s1=subplot(1,2,1); 
surf(peaks(20)); 

s2=subplot(1,2,2); 
surf(peaks(20)); 
hb = colorbar('location','eastoutside'); 

%% # Solution: 
s1Pos = get(s1,'position'); 
s2Pos = get(s2,'position'); 
s2Pos(3:4) = [s1Pos(3:4)]; 
set(s2,'position',s2Pos); 



%% # Alternative method. Brute force placement 
set(s1,'Units','normalized', 'position', [0.1 0.2 0.3 0.6]); 
set(s2,'Units','normalized', 'position', [0.5 0.2 0.3 0.6]); 
set(hb,'Units','normalized', 'position', [0.9 0.2 0.05 0.6]); 

enter image description here

+0

¡Estupendo! La solución automática es mejor, pero la fuerza bruta me permite reducir el espacio entre las parcelas de modo que sea igual al que está entre la gráfica derecha y la barra de colores. Gracias por proporcionar dos buenas maneras. – petrichor

1

Esto es justo lo que estaba buscando. Después de implementar Vidar's automatic solution, se me ocurrió una simplificación. Obtenga la posición de los ejes de la extrema derecha ANTES de agregar la barra de colores, y luego simplemente restablezca la posición exprimida al original:

f1=figure(1);clf; 
s1=subplot(1,2,1); 
surf(peaks(20)); 

s2=subplot(1,2,2); 
surf(peaks(20)); 
s2Pos = get(s2,'position'); 

hb = colorbar('location','eastoutside'); 
set(s2,'position',s2Pos); 
+0

Lo probé, pero las etiquetas de la barra de colores parecen estar fuera de la trama. – petrichor

Cuestiones relacionadas