2010-09-03 2 views
7

У меня есть два массива два-на-n, представляющие 2d-точки. Эти два массива построены на том же рисунке, но в двух разных подзаголовках. Для каждой точки в одном из массивов есть соответствующая точка i другого массива. Я хочу показать это соответствие, вычерчивая линию из одной из подзаголовков в другой подзаговор.Рисование линии между двумя подзаголовками

Решения я нашел что-то вроде:

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

Строит линия в системе координат задается осями называют. Для того, чтобы это работало для меня, мне нужен способ изменить систему координат между системой подзаголовков и новой системой. Кто-нибудь знает, как это можно сделать?

Возможно, существует другой способ сделать это. Если так, я хотел бы узнать.

ответ

7

Сначала вам нужно преобразовать координаты осей в координаты фигур. Затем вы можете использовать функцию ANNOTATION, чтобы нарисовать линии на рисунке.

Вы можете использовать подачу Data space to figure units conversion (ds2nfu) на FileExchange.

Вот пример кода:

% 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

+1

Не работает для меня: линии рисуются от одного «подзаголовка» до другого, но они не связывают точки. Более того, когда я изменяю размер фигуры, линии меняют свои относительные позиции ... – Shai

+0

Я думаю, что это ошибка в представленном скрипте. @Shai – SolessChong

-1

Простым решением является использование панели инструментов в окне рисунка. Просто нажмите «Вставить», а затем «Линия».

Смежные вопросы