2010-09-03 22 views
7

Tengo dos matrices de dos por uno, que representan 2d puntos. Estas dos matrices están trazadas en la misma figura, pero en dos subparcelas diferentes. Para cada punto en una de las matrices, hay un punto correspondiente en la otra matriz. Quiero mostrar esta correspondencia dibujando una línea desde una de las subtramas hasta la otra subparcela.Dibujar línea entre dos subtramas

Las soluciones que he encontrado son algo así como:

ah=axes('position',[.2,.2,.6,.6],'visible','off'); % <- select your pos... 
line([.1,.9],[.1,.9],'parent',ah,'linewidth',5); 

Esto dibuja una línea en el sistema de coordenadas determinado por los ejes llamar. Para que esto funcione, necesito una forma de cambiar el sistema de coordenadas entre el sistema de subtramas y el nuevo sistema. ¿Alguien sabe cómo se puede hacer esto?

Quizás haya una forma diferente de hacerlo. Si es así, me encantaría saber.

Respuesta

7

Primero debe convertir las coordenadas de los ejes a las coordenadas de las figuras. Luego puede usar la función ANNOTATION para dibujar líneas en la figura.

Puede usar el envío Data space to figure units conversion (ds2nfu) en FileExchange.

Aquí es un ejemplo de código:

% two 2x5 arrays with random data 
a1 = rand(2,5); 
a2 = rand(2,5); 

% two subplots 
subplot(211) 
scatter(a1(1,:),a1(2,:)) 
% Convert axes coordinates to figure coordinates for 1st axes 
[xa1 ya1] = ds2nfu(a1(1,:),a1(2,:)); 


subplot(212) 
scatter(a2(1,:),a2(2,:)) 
% Convert axes coordinates to figure coordinates for 2nd axes 
[xa2 ya2] = ds2nfu(a2(1,:),a2(2,:)); 

% draw the lines 
for k=1:numel(xa1) 
    annotation('line',[xa1(k) xa2(k)],[ya1(k) ya2(k)],'color','r'); 
end 

Asegúrese de que sus arreglos de datos son iguales en tamaño.

Editar: El código anterior hará conversión de datos para un eje actual. También puede hacerlo para ejes específicos:

hAx1 = subplot(211); 
% ... 
[xa1 ya1] = ds2nfu(hAx1, a1(1,:),a1(2,:)); 
+1

Gracias. ¡Esto me ayudó mucho! – PKeno

+1

No funciona para mí: las líneas se extraen de una "subtrama" a la otra, pero no vinculan los puntos. Además, cuando cambio el tamaño de la figura, las líneas cambian sus posiciones relativas ... – Shai

+0

Creo que es el error en el script enviado. @Shai – SolessChong

-1

Una solución simple es utilizar la barra de herramientas en la ventana de la figura. Simplemente haga clic en "Insertar" y luego en "Línea".

Cuestiones relacionadas