Как построить стрелку с координатами данных в Matlab?
65505 просмотра
8 ответа
Я знаю, что есть функция с именем аннотации, которая может наносить стрелки или двойные стрелки. Но аннотацию можно построить только в нормализованной единице. Например:
annotation('arrows',[x1 x2],[y1 y2])
Здесь [x1, x2] должно быть числом с соотношением меньше единицы.
Итак, мой вопрос, как я могу построить стрелки с истинным значением, а не нормализованным значением?
Интересно, есть ли какая-нибудь другая функция, способная приблизиться к этому, или есть какая-нибудь функция, я могу получить значение оси фигуры, чтобы я мог отрегулировать истинное значение в нормализованное значение.
Автор: datcn Источник Размещён: 12.11.2019 09:28Ответы (8)
5 плюса
Я только что открыл этот метод, так как не хочу беспокоиться о нормализованных единицах. Используйте латексный переводчик:
figure
plot([1:5],[1:5]*3,'.-')
%// Say I want to put an arrow pointing to the location, [3 9]
text(2.94,8.3,'\uparrow','fontsize',20)
text(2.8,7.8,'point [3,9]')
Чтобы сделать стрелку длиннее, используйте больший размер шрифта.
Pros
- Проще, быстрее и быстрее, чем использование нормализованных единиц
- Не нужно устанавливать какие-либо функции (хорошо для нас, ленивых людей ..)
- используя интерпретатор LaTeX, существует целый ряд стрелок (вверх, вниз, влево, вправо и другие углы (см. Список символов )
Cons
- Определенно требуется пробная версия и ошибка / настройка, чтобы получить правильное расположение наконечника стрелки относительно POI.
- Существует ограниченный контроль над длиной стрелки
- Некоторые латексные команды не понимаются интерпретатором (бу).
12 плюса
Для позиционирования аннотаций Matlab предлагает функцию dsxy2figxy
преобразования точек пространства данных в нормализованные координаты пространства. Однако по тем или иным причинам эта функция не включена в дистрибутив Matlab и должна быть сначала «создана».
Скопируйте следующую строку в командное окно и выполните ее, чтобы открыть функцию в редакторе.
edit(fullfile(docroot,'techdoc','creating_plots','examples','dsxy2figxy.m'))
Чтобы использовать функцию, dsxy2figxy
сохраните ее где-нибудь в вашем пути поиска в MATLAB.
Пожалуйста, ознакомьтесь с полными инструкциями для этой функции dsxy2figxy
на сайте matlab-central: http://www.mathworks.de/help/techdoc/creating_plots/bquk5ia-1.html.
10 плюса
Несмотря на то, что annotation
используются в normalized
качестве единиц по умолчанию, вы можете связать эти объекты с текущими осями ( gca
) и использовать единицы данных для настройки X
и Y
свойств.
Вот пример построения одной стрелки.
plot(1:10);
ha = annotation('arrow'); % store the arrow information in ha
ha.Parent = gca; % associate the arrow the the current axes
ha.X = [5.5 5.5]; % the location in data units
ha.Y = [2 8];
ha.LineWidth = 3; % make the arrow bolder for the picture
ha.HeadWidth = 30;
ha.HeadLength = 30;
Автор: marsei
Размещён: 29.03.2016 05:07
8 плюса
Для тех, кто сталкивается с этой темой и хочет нарисовать стрелки в «пространстве данных», а не в единицах относительно фигуры и / или осей, я настоятельно рекомендую arrow.m из обмена файлами.
Автор: tmpearce Размещён: 16.07.2012 01:592 плюса
Если я правильно помню, вам нужно рассчитать положение осей по отношению к фигуре.
это должно идти как:
%% example plot
clf
plot(rand(5,2)*5)
%% get info specific to the axes you plan to plot into
set(gcf,'Units','normalized')
set(gca,'Units','normalized')
ax = axis;
ap = get(gca,'Position')
%% annotation from 1,2 to 3,4
xo = [1,3];
yo = [2,4];
xp = (xo-ax(1))/(ax(2)-ax(1))*ap(3)+ap(1);
yp = (yo-ax(3))/(ax(4)-ax(3))*ap(4)+ap(2);
ah=annotation('arrow',xp,yp,'Color','r');
Примечание Фиксированное смещение в исходном расчете - ap (3), ap (4) - ширина и высота gca, а не угловые позиции
Автор: bdecaf Размещён: 16.07.2012 10:171 плюс
После создания объекта аннотации следует установить абсолютное свойство Units . Пример:
arrowObj = annotation('arrow', [0.1 0.1], [0.5 0.5]);
set(arrowObj, 'Units', 'centimeters');
set(arrowObj, 'Position', [1 1 3 5]);
Автор: Deve
Размещён: 16.07.2012 08:36
0 плюса
Одним из подходов будет определение стрелки в единицах оси:
Ax=[0 -0.003 0.003 0]; % (Ax,Ay) form an upward pointing arrowhead.
Ay=[0.01 0.0060 0.0060 0.01];
Ax=Ax-mean(Ax); % center it on zero
Ay=Ay-mean(Ay);
Затем при желаемом указателе стрелки на кривой vv вычислить
x1=vv(in,1); y1=vv(in,2);
x2=vv(in+1,1); y2=vv(in+1,2);
u=x2-x1;
v=y2-y1;
th=-pi/2+atan2(v,u);
R=[cos(th) -sin(th); sin(th) cos(th)]; % Rotation matrix for local slope of vv.
A=R*[Ax;Ay]; % Rotate the arrowhead.
patch(x1+A(1,:),y1+A(2,:),'r','LineWidth',0.01) % plot rotated arrowhead at (x1,y1).
plot(x1+A(1,:),y1+A(2,:),'r','LineWidth',0.01) % Kludge to make boundary red too (I'm sure there is a more elegant way).
Работал для меня, для моих конкретных обстоятельств.
Автор: LasVegas Размещён: 23.01.2015 02:390 плюса
Вы можете использовать компонент «стрелка» в (хорошо документированном) наборе инструментов DaVinci Draw (полное раскрытие: я написал / продал набор инструментов, хотя стрелки свободны).
Пример синтаксиса и пример вывода приведены ниже.
davinci( 'arrow', 'X', [0 10], 'Y', [0 2], <plus-lots-of-options> )
Автор: Leonard Wayne
Размещён: 15.10.2015 04:34
Вопросы из категории :
- matlab Каковы эффективные способы объединения двух структур в MATLAB?
- matlab Можно ли выполнять параллельные обходы в MATLAB так же, как в Python?
- matlab Каков самый простой способ экспортировать данные Excel в Matlab?
- matlab Как работают свойства в объектно-ориентированном MATLAB?
- matlab Как нарисовать график поверхности без черных краев в MATLAB?
- plot Как вы меняете размер фигур, нарисованных с помощью matplotlib?
- plot Есть ли способ отсоединить графики matplotlib, чтобы вычисления могли продолжаться?
- plot Библиотека / инструмент для рисования тройных / треугольных графиков
- plot Участки без заголовков / надписей в R
- annotations Когда вы используете аннотацию @Override в Java и почему?
- annotations Должны ли мы @Override реализации метода интерфейса?
- annotations Сканирование аннотаций Java во время выполнения
- annotations Создать экземпляр аннотации со значениями по умолчанию в Java
- annotations проблемы с именем колонки в спящем режиме
- figure MATLAB: распечатать фигуру в pdf, как показано в MATLAB
- figure Matlab waitbar - закрыть все не работает
- figure Matplotlib (pyplot) savefig выводит пустое изображение
- figure Матплотлиб разных размеров подзаговоров
- figure Как построить стрелку с координатами данных в Matlab?