Comment dessiner une flèche en Matlab?

j'essaie de dessiner une flèche dans le graphique de matlab, sans succès.

exemple de Code:

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

est-ce qu'il y a une fonction dans matlab qui peut dessiner des flèches ? Merci

19
demandé sur thewaywewalk 2014-09-08 21:26:13

5 réponses

Vous pouvez utiliser l' (bien documenté) DaVinci Tirage boîte à outils (divulgation complète: j'ai écrit/vendre la boîte à outils, bien que les flèches sont libres). La syntaxe d'exemple et la sortie d'exemple sont ci-dessous.

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

enter image description here

6
répondu Leonard Wayne 2015-12-09 05:17:05

Vous pourriez abus quiver, de cette façon, vous n'avez pas à traiter avec unhandy normalisée figure unités par l'utilisation 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)

enter image description here

Important est l' 5e argument de quiver: 0 qui désactive une mise à l'échelle par défaut, car cette fonction est en fait utilisée pour tracer les champs vectoriels. (ou utilisez la paire de valeurs poperty 'AutoScale','off')

vous pouvez aussi ajouter des caractéristiques:

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 vous n'aimez pas les pointes de flèche, vous devez retourner aux annotations et cette réponse est peut-être utile:

Comment puis-je changer le style de tête de flèche dans l'intrigue de carquois?


Quelques remarques concernant les commentaires:

la taille de la tête de flèche peut être ajustée avec le 'MaxHeadSize' propriété, ce n'est pas cohérent malheureusement. Le axes limites doivent être définies aprè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 solution par sed semble être le meilleur, car il offre réglable pointes de flèches.

j'avais juste envelopper dans une fonction:

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

lequel vous pouvez appeler à partir de votre script comme suit:

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

vous donnant des résultats assez similaires:

enter image description here

39
répondu thewaywewalk 2017-05-23 11:54:16

Vous pouvez utiliser arrow à partir du fichier d'échange. arrow(Start,Stop) dessine une ligne avec une flèche du début à L'arrêt (les points doivent être des vecteurs de longueur 2 ou 3, ou des matrices avec 2 ou 3 colonnes), et renvoie le manche graphique de la ou des flèches.

Edit: @Lama a aussi raison, vous pouvez utiliser annotation mais vous devez tenir compte des limites de la parcelle.

annotation('arrow',x,y)

crée un objet d'annotation de flèche qui s'étend du point définie par x(1),y(1) pour le point défini par x(2),y(2), spécifié dans normalisée figure unités. Vous pouvez utiliser l' conversion de L'espace de données en unités de chiffre fonction (ds2nfu.m) de l'échange de fichiers pour vous faciliter la vie.

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

enter image description here

notez Qu'il y a certaines fonctionnalités non documentées qui permettent d'épingler des annotations aux graphiques si cela est nécessaire, en savoir plus à ce sujet ici...

8
répondu bla 2014-09-08 18:31:39

parmi d'autres solutions, en voici une qui utilise annotation où vous pouvez définir les propriétés des flèches incluant (x,y,width,height) dans les axes actuels, les propriétés de la tête et de la ligne.

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

donne

enter image description here

6
répondu marsei 2014-09-08 19:52:38

Vous pouvez aussi utiliser par exemple

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

voir illustration

2
répondu Flo 2017-04-03 14:14:05