Нарисуйте линию между двумя участками - PullRequest
8 голосов
/ 03 сентября 2010

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

Решения, которые я нашел, выглядят примерно так:

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

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

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

Ответы [ 2 ]

8 голосов
/ 03 сентября 2010

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

Вы можете использовать Пространство данных для перевода единиц измерения (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,:));
0 голосов
/ 03 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...