the - subplot matlab
¿Cómo dibujar una flecha en matlab? (5)
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
Entre otras soluciones, aquí hay una que utiliza la annotation
donde puede configurar las propiedades de la flecha, incluidas (x,y,width,height)
dentro de los ejes actuales , las propiedades de la cabeza y la 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
Podría abusar de la quiver
, de esta manera no tendrá que lidiar con unidades de figuras normalizadas poco hábiles mediante el uso de 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)
Importante es el quinto argumento de quiver
: 0 que deshabilita una escala por defecto, ya que esta función se usa para trazar campos vectoriales. (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'')
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 punta de flecha en la trama de carcaj?
Algunas observaciones con respecto a los comentarios:
El tamaño de la punta 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])
La solución por sed parece ser la mejor, porque ofrece cabezas de flecha 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 puede llamar desde su 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
dando resultados bastante similares:
Puede usar la caja de herramientas de DaVinci Draw (bien documentada) (divulgación completa: escribí / vendí la caja de herramientas, aunque las flechas son gratis). La sintaxis de ejemplo y la salida de ejemplo están abajo.
davinci( ''arrow'', ''X'', [0 10], ''Y'', [0 2], <plus-lots-of-options> )
Puede utilizar la arrow
del intercambio de archivos . arrow(Start,Stop)
dibuja una línea con una flecha de Start a Stop (los puntos deben ser vectores de longitud 2 o 3, o matrices con 2 o 3 columnas), y devuelve el controlador de gráficos de la (s) flecha (s).
Edición: @Lama también tiene razón, puedes usar la annotation
pero debes tener en cuenta los límites de la trama.
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) del intercambio de archivos para facilitar su vida.
[xf yf]=ds2nfu(x,y);
annotation(gcf,''arrow'', xf,yf)
Tenga en cuenta que hay algunas características no documentadas que permiten anclar anotaciones en gráficos si es necesario, lea más sobre esto here ...
También puedes usar por ejemplo
text(x,y,''/leftarrow t_1'',''FontSize'',12,''FontWeight'',''bold'')