2010-09-03 84 views
7

我有兩個兩乘n陣列,代表2d點。這兩個數組繪製在同一個圖中,但在兩個不同的子圖中。對於其中一個數組中的每個點,在另一個數組中有一個對應點。我想通過從其中一個子圖繪製一條線到另一個子圖來顯示此對應關係。兩個子圖之間畫線

我已經找到了解決方案是這樣的:

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

該地塊由軸給出的座標系中的線叫。爲了讓這對我有用,我需要一種方法來改變子圖系統和新系統之間的座標系。任何人都知道如何做到這一點?

也許有這樣做的不同方式。如果是這樣我很想知道。

回答

7

首先,您必須將軸座標轉換爲圖座標。然後你可以使用ANNOTATION函數在圖中畫線。

您可以在FileExchange上使用Data space to figure units conversion (ds2nfu)提交。

這裏是一個代碼示例:

% 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 

確保您的數據數組的大小相等。

編輯:上面的代碼將對當前軸進行數據轉換。您也可以對特定軸執行此操作:

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

謝謝。這幫助我很多! – PKeno 2010-09-04 09:32:52

+1

不適用於我:線條從一個「子區域」繪製到另一個,但它們不鏈接點。此外,當我調整圖形大小時,線條會改變它們的相對位置...... – Shai 2013-05-16 10:56:21

+0

我認爲這是提交的腳本中的錯誤。 @Shai – SolessChong 2014-04-23 02:32:30

-1

一個簡單的解決方案是使用圖形窗口中的工具欄。只需點擊「插入」,然後「線」。