Нарисуйте линию между двумя участками
У меня есть два двухместных массива, представляющих 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,:));
Простое решение - использовать панель инструментов в окне рисунка. Просто нажмите "вставить", а затем "Линия".