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

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

 davinci( 'arrow', 'X', [0 10], 'Y', [0 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) 

введите описание изображения здесь

Важным является 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') 

введите описание изображения здесь

Если вам не нравятся стрелки, вам нужно вернуться к annotations, и этот ответ может быть полезен:

Как изменить стиль стрелочной головки на участке колчана?


Некоторые замечания относительно комментариев:

Размер стрелочной головки можно настроить с помощью '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]) 

введите описание изображения здесь


Решение 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 

который вы можете вызвать из своего скрипта следующим образом:

 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 

давая вам совершенно похожие результаты:

введите описание изображения здесь

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

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

 annotation('arrow',x,y) 

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

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

введите описание изображения здесь

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

Среди других решений, здесь используется 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); 

дает

введите описание изображения здесь

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

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

Смотрите иллюстрацию

  • Разрыв строки в выражении ()?
  • Как установить лимиты для осей в графиках ggplot2 R?
  • R return corrplot как объект
  • Добавление таблицы в область построения графика ggplot в r
  • Разница между опциями передачи в aes () и за ее пределами в ggplot2
  • Как сохранить сюжет как изображение на диске?
  • pandas 0.21.0 Проблема совместимости с меткой времени с помощью matplotlib
  • Графические диаграммы на карте с использованием ggplot2?
  • R Заseleniumные сетки долготы - широта сетки на карте
  • сюжеты, создаваемые «сюжет» и «ggplot» бок о бок
  • Добавление полосы прокрутки в подзаголовки в графическом интерфейсе
  • Давайте будем гением компьютера.