Как нарисовать стрелу в Matlab?
Я пытаюсь нарисовать стрелку в графе Matlab без каких-либо успехов.
Пример кода:
function [ output_args ] = example( input_args )
figure ('Name', 'example');
x = [10 30]
y = [10 30]
xlim([1, 100])
ylim([1, 100])
arrow (x, y) ???
end
Есть ли какая-либо функция в matlab, которая может рисовать стрелку?
Благодаря
Ответы
Ответ 1
Вы можете использовать (хорошо документированный) Инструмент DaVinci Draw (полное раскрытие: я написал/продал инструментарий, хотя стрелки свободны), Ниже приведены примеры синтаксиса и примера.
davinci( 'arrow', 'X', [0 10], 'Y', [0 2], <plus-lots-of-options> )
![введите описание изображения здесь]()
Ответ 2
Вы можете злоупотреблять quiver
, таким образом вам не придется иметь дело с неуправляемыми нормализованными единицами фигуры используя annotation
drawArrow = @(x,y) quiver( x(1),y(1),x(2)-x(1),y(2)-y(1),0 )
x1 = [10 30];
y1 = [10 30];
drawArrow(x1,y1); hold on
x2 = [25 15];
y2 = [15 25];
drawArrow(x2,y2)
![enter image description here]()
Важным является аргумент 5 quiver
: 0, который отключает масштабирование по умолчанию по умолчанию, так как эта функция фактически используется для построения векторных полей. (или используйте пару значений патента 'AutoScale','off'
)
Вы также можете добавить дополнительные функции:
drawArrow = @(x,y,varargin) quiver( x(1),y(1),x(2)-x(1),y(2)-y(1),0, varargin{:} )
drawArrow(x1,y1); hold on
drawArrow(x2,y2,'linewidth',3,'color','r')
![введите описание изображения здесь]()
Если вам не нравятся стрелки, вам нужно вернуться к аннотации, и этот ответ может быть полезен:
Как изменить стиль заголовка стрелки в квадрате колчана?
Некоторые замечания относительно комментариев:
Размер стрелочной головки можно настроить с помощью свойства 'MaxHeadSize'
, к сожалению, он не соответствует. Пределы осей должны быть установлены впоследствии
x1 = [10 30];
y1 = [10 30];
drawArrow(x1,y1,{'MaxHeadSize',0.8,'Color','b','LineWidth',3}); hold on
x2 = [25 15];
y2 = [15 25];
drawArrow(x2,y2,{'MaxHeadSize',10,'Color','r','LineWidth',3}); hold on
xlim([1, 100])
ylim([1, 100])
![enter image description here]()
Решение sed кажется лучшим, потому что оно предлагает регулируемые головки стрелок.
Я бы просто включил его в функцию:
function [ h ] = drawArrow( x,y,xlimits,ylimits,props )
xlim(xlimits)
ylim(ylimits)
h = annotation('arrow');
set(h,'parent', gca, ...
'position', [x(1),y(1),x(2)-x(1),y(2)-y(1)], ...
'HeadLength', 10, 'HeadWidth', 10, 'HeadStyle', 'cback1', ...
props{:} );
end
который вы можете вызвать из своего script следующим образом:
drawArrow(x1,y1,[1, 100],[1, 100],{'Color','b','LineWidth',3}); hold on
drawArrow(x2,y2,[1, 100],[1, 100],{'Color','r','LineWidth',3}); hold on
дает вам очень похожие результаты:
![enter image description here]()
Ответ 3
Вы можете использовать arrow
из обмена файлами. arrow(Start,Stop)
рисует линию со стрелкой от начала до остановки (точки должны быть векторами длиной 2 или 3 или матрицами с 2 или 3 столбцами) и возвращает графический дескриптор стрелки (-ов).
Изменить: @Lama также прав, вы можете использовать annotation
, но вам нужно принять во внимание пределы графика.
annotation('arrow',x,y)
создает объект аннотации стрелки, который простирается от точки, определяемой x (1), y (1), до точки, определяемой x (2), y (2), указанной в нормализованных единицах фигуры. Вы можете использовать
Функция обмена данными для преобразования единиц измерения (ds2nfu.m) из обмена файлами, чтобы облегчить вашу жизнь.
[xf yf]=ds2nfu(x,y);
annotation(gcf,'arrow', xf,yf)
![enter image description here]()
Обратите внимание, что есть некоторые недокументированные функции, которые позволяют привязывать аннотации к графикам, если это необходимо, подробнее об этом здесь...
Ответ 4
Среди других решений, здесь используется annotation
, где вы можете установить свойства стрелки, включая (x,y,width,height)
в пределах текущих осей, свойства головы и линии.
h=annotation('arrow');
set(h,'parent', gca, ...
'position', [50 5 20 2], ...
'HeadLength', 1000, 'HeadWidth', 100, 'HeadStyle', 'hypocycloid', ...
'Color', [0.4 0.1 0.8], 'LineWidth', 3);
дает
![enter image description here]()
Ответ 5
Вы также можете использовать
text(x,y,'\leftarrow t_1','FontSize',12,'FontWeight','bold')
См. иллюстрацию