J'essaie de dessiner une flèche dans le graphique 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
Y a-t-il une fonction dans matlab qui peut dessiner une flèche? Merci
Vous pouvez utiliser la (bien documentée) boîte à outils DaVinci Draw (divulgation complète: j'ai écrit/vendu la boîte à outils, bien que les flèches soient gratuites). Voici un exemple de syntaxe et d'exemple de sortie.
davinci( 'arrow', 'X', [0 10], 'Y', [0 2], <plus-lots-of-options> )
Vous pourriez abuser (quiver
, de cette façon, vous n'avez pas à gérer les unités de chiffres normalisées peu pratiques en 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 le 5ème argument de quiver
: 0 ce qui désactive une mise à l'échelle par défaut, car cette fonction est en fait utilisée pour tracer des champs vectoriels. (ou utilisez la paire de valeurs de propriété 'AutoScale','off'
)
Vous pouvez également ajouter des fonctionnalités supplémentaires:
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 revenir aux annotations et cette réponse peut être utile:
Comment puis-je changer le style de tête de flèche dans le tracé 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 malheureusement pas cohérent. Les limites des axes doivent ensuite être définies
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 de sed semble être la meilleure, car elle propose des têtes de flèches réglables.
Je voudrais simplement l'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
que 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 de l'échange de fichiers . arrow(Start,Stop)
trace une ligne avec une flèche du début à la fin (les points doivent être des vecteurs de longueur 2 ou 3 ou des matrices à 2 ou 3 colonnes) et renvoie la poignée graphique de la ou des flèches.
Edit: @Lama a également raison, vous pouvez utiliser annotation
mais vous devez tenir compte de la limites de la parcelle.
annotation('arrow',x,y)
crée un objet d'annotation de flèche qui s'étend du point défini par x (1), y (1) au point défini par x (2), y (2), spécifié en unités de figures normalisées . Vous pouvez utiliser la fonction Espace de données pour convertir les unités de chiffres (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 existe des fonctionnalités non documentées qui permettent d'épingler des annotations aux graphiques si cela est nécessaire, en savoir plus ici ...
Parmi d'autres solutions, voici une utilisant annotation
où vous pouvez définir les propriétés des flèches, y compris (x,y,width,height)
dans les axes actuels, les propriétés head et line.
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 également utiliser par exemple
text(x,y,'\leftarrow t_1','FontSize',12,'FontWeight','bold')