Нарисуйте линию между двумя участками

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

Решения, которые я нашел, являются чем-то вроде:

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

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

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

2 ответа

Решение

Сначала вы должны преобразовать координаты осей в координаты фигуры. Затем вы можете использовать функцию АННОТАЦИЯ для рисования линий на рисунке.

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

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

Другие вопросы по тегам