Cómo dibujar una flecha en Matlab?

Estoy tratando de dibujar una flecha en el gráfico matlab, sin ningún éxito.

Ejemplo de código:

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 

¿Hay alguna función en matlab que pueda dibujar flecha? Gracias

Puede utilizar la (bien documentada) caja de herramientas DaVinci Draw (divulgación completa: escribí / vendí la caja de herramientas, aunque las flechas son gratuitas). Ejemplo de syntax y salida de ejemplo a continuación.

 davinci( 'arrow', 'X', [0 10], 'Y', [0 2],  ) 

enter image description here

Podrías abusar de la quiver , de esta manera no tienes que lidiar con unidades de figuras normalizadas inflexibles mediante 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

Importante es el quinto argumento de quiver : 0 que desactiva una escala por defecto, ya que esta función se usa realmente para trazar campos de vectores. (o use el par de valores 'AutoScale','off' )

También puede agregar características adicionales:

 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') 

enter image description here

Si no te gustan las puntas de flecha, debes volver a las anotaciones y esta respuesta puede ser útil:

¿Cómo cambio el estilo de la cabeza de flecha en la gráfica de temblor?


Algunas observaciones sobre los comentarios:

El tamaño de la cabeza de la flecha se puede ajustar con la propiedad 'MaxHeadSize' , desafortunadamente no es consistente. Los límites de los ejes deben establecerse después

 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


La solución de sed parece ser la mejor, ya que ofrece cabezas de flechas ajustables.

Simplemente lo envolvería en una función:

 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 

que puedes invocar desde tu script de la siguiente manera:

 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 

que le da resultados bastante similares:

enter image description here

Puedes usar la arrow desde el intercambio de archivos . arrow(Start,Stop) dibuja una línea con una flecha de inicio a fin (los puntos deben ser vectores de longitud 2 o 3, o matrices con 2 o 3 columnas), y devuelve el control gráfico de las flechas.

Editar: @Lama también está en lo cierto, puedes usar la annotation pero debes tener en cuenta los límites de la ttwig.

 annotation('arrow',x,y) 

crea un objeto de anotación de flecha que se extiende desde el punto definido por x (1), y (1) hasta el punto definido por x (2), y (2), especificado en unidades de figura normalizadas . Puede usar el espacio de datos para calcular la función de conversión de unidades (ds2nfu.m) desde el intercambio de archivos para hacer su vida más fácil.

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

enter image description here

Tenga en cuenta que hay algunas características no documentadas que permiten fijar anotaciones a los gráficos si es necesario, lea más al respecto aquí …

Entre otras soluciones, he aquí una que utiliza la annotation en la que puede establecer las propiedades de la flecha que incluyen (x,y,width,height) dentro de los ejes actuales , las propiedades de cabeza y línea.

 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); 

da

enter image description here

También puede usar, por ejemplo,

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

Ver ilustración