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
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> )
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)
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')
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])
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:
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)
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...
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
Vous pouvez aussi utiliser par exemple
text(x,y,'\leftarrow t_1','FontSize',12,'FontWeight','bold')