2010-09-03 22 views
7

Ich habe zwei zwei-mal-n-Arrays, die 2d-Punkte darstellen. Diese beiden Arrays sind in der gleichen Abbildung, aber in zwei verschiedenen Unterplots dargestellt. Für jeden Punkt in einem der Arrays gibt es einen entsprechenden Punkt in dem anderen Array. Ich möchte diese Korrespondenz zeigen, indem ich eine Linie von einem der Subplots zum anderen Subplot zeichne.Linie zwischen zwei Unterplots zeichnen

Die Lösungen i gefunden habe, sind so etwas wie:

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

Dies zeichnet eine Zeile in dem Aufruf durch die Achsen gegeben Koordinatensystem. Damit dies für mich funktioniert, brauche ich eine Möglichkeit, das Koordinatensystem zwischen dem Subplot-System und dem neuen System zu ändern. Jeder weiß, wie das gemacht werden kann?

Vielleicht gibt es andere Möglichkeiten, dies zu tun. Wenn ja, würde ich es gerne wissen.

Antwort

7

Zuerst müssen Sie Achsenkoordinaten in Bildkoordinaten umrechnen. Dann können Sie die Funktion ANNOTATION verwenden, um Linien in der Abbildung zu zeichnen.

Sie können Data space to figure units conversion (ds2nfu) Einreichung auf FileExchange verwenden.

Hier ist ein Codebeispiel:

% 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 

Stellen Sie sicher sind Ihre Daten-Arrays gleich groß.

Bearbeiten: Der obige Code wird Datenkonvertierung für eine aktuelle Achsen tun. Sie können dies auch für bestimmte Achsen tun:

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

Vielen Dank. Das hat mir sehr geholfen! – PKeno

+1

Funktioniert nicht für mich: die Linien werden von einem "Nebenpunkt" zum anderen gezogen, aber sie verbinden die Punkte nicht. Außerdem, wenn ich die Größe der Figur verändere, ändern die Linien ihre relativen Positionen ... – Shai

+0

Ich denke, es ist der Fehler im eingereichten Skript. @Shai – SolessChong

-1

Eine einfache Lösung ist die Verwendung der Symbolleiste im Figurenfenster. Klicken Sie einfach auf "Einfügen" und dann auf "Linie".

Verwandte Themen