Как нарисовать стрелу в 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, которая может рисовать стрелку? благодаря
- Изменение цвета в ggpairs теперь, когда параметры устарели
- Участок множественного ящика в одном графике
- Как удалить пространство между осью и областью в ggplot2?
- Постройте два графика в одном графике в R
- Объединить строки и выражения в заголовок сюжета
- Довольно тикает для нормальной шкалы журнала, используя ggplot2 (динамический не ручной)
- Позиция geom_text на уклонившейся панели
- Хранение объектов ggplot в списке из цикла в R
- отображение в реальном времени данных по (qwt) Осциллограмма
- Постройте плоскость на основе нормального вектора и точки в Matlab или matplotlib
- Как изменить название легенды в ggplot
- Точки метки в geom_point
- Наложение двух графиков ggplot2 stat_density2d с альфа-каналами
Вы можете использовать (хорошо документированный) набор инструментов 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')
Смотрите иллюстрацию