web-dev-qa-db-ja.com

Matlabで矢印を描く方法は?

Matlabグラフに矢印を描画しようとしていますが、成功していません。

コード例:

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

Matlabに矢印を描くことができる関数はありますか?ありがとう

22
user3668129

(十分に文書化された) DaVinci Drawツールボックス (完全な開示:ツールボックスを作成/販売しましたが、矢印は無料です)を使用できます。構文例と出力例は次のとおりです。

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

enter image description here

6
Leonard Wayne

quiver を悪用する可能性があります。 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

重要なのは、quiver5th引数:この関数は実際にベクトルフィールドをプロットするために使用されるため、デフォルトのスケーリングを無効にします。 (または、poperty値のペア'AutoScale','off'を使用します)

追加機能を追加することもできます。

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

矢印が気に入らない場合は、注釈に戻る必要があります。この回答が役立つ場合があります。

quiver plotで矢じりのスタイルを変更するにはどうすればよいですか?


コメントに関するいくつかのコメント:

矢印の頭のサイズは'MaxHeadSize'プロパティで調整できますが、残念ながら一貫していません。軸の制限を設定する必要があります後で

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


sedによる解決策 は、調整可能な矢印の頭を提供するため、最高のようです。

私はそれを関数にラップするだけです:

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

次のようにスクリプトから呼び出すことができます。

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

似たような結果が得られます:

enter image description here

46
thewaywewalk

arrowファイル交換から を使用できます。 arrow(Start,Stop)は、StartからStop(矢印は長さ2または3のベクトル、または2または3列の行列)に矢印のある線を描画し、矢印のグラフィックスハンドルを返します。

Edit:@Lamaも正しい、 annotation を使用できますが、プロット制限。

annotation('arrow',x,y)

x(1)、y(1)で定義された点からx(2)、y(2)で定義された点まで伸びる矢印注釈オブジェクトを作成し、正規化された図の単位で指定します。ファイル交換の データ空間から図の単位への変換 関数(ds2nfu.m)を使用すると、作業が楽になります。

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

enter image description here

必要に応じて注釈をグラフにピン留めできるドキュメント化されていない機能があることに注意してください。詳細についてはこちらをご覧ください here ...

8
bla

他のソリューションの中では、annotationを使用するものがあります。ここでは、(x,y,width,height)現在の軸内、headおよび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);

与える

enter image description here

6
marsei

また、例えばを使用することもできます

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

図を参照

2
Flo