Как нарисовать стрелку в 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 функция, которая может рисовать стрелку ? Спасибо

5 ответов


вы можете использовать (хорошо документированный) DaVinci Draw toolbox (полное раскрытие: я написал / продаю toolbox, хотя стрелки бесплатны). Синтаксис и пример вывода приведены ниже.

davinci( 'arrow', 'X', [0 10], 'Y', [0 2], <plus-lots-of-options> )

enter image description here


вы могли бы злоупотреблять 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-й


можно использовать arrow из файла обмена. arrow(Start,Stop) рисует линию со стрелкой от начала до конца(точки должны быть векторами длины 2 или 3 или матрицами с 2 или 3 столбцами) и возвращает графический дескриптор стрелки (ов).

Edit: @Lama также прав, вы можете использовать annotation но вам нужно учитывать пределы сюжета.

annotation('arrow',x,y)

создает объект аннотации стрелки, который простирается от точки определяется x (1), y(1) до точки, определенной x(2), y(2), указанной в нормализованные единицы измерения. Вы можете использовать пространство данных для преобразования единиц измерения функция (ds2nfu.м) от обмена файлами, чтобы сделать вашу жизнь проще.

[xf yf]=ds2nfu(x,y);
annotation(gcf,'arrow', xf,yf)

enter image description here

обратите внимание, что есть некоторые недокументированные функции, которые позволяют прикреплять аннотации к графикам, если это необходимо, подробнее об этом здесь...


среди других решений, вот один, используя annotation где вы можете установить свойства стрелки, включая (x,y,width,height) в текущих осях, свойства head и line.

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


вы также можете использовать, например,

text(x,y,'\leftarrow t_1','FontSize',12,'FontWeight','bold')

см. Панель иллюстр.