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に矢印を描くことができる関数はありますか?ありがとう
(十分に文書化された) DaVinci Drawツールボックス (完全な開示:ツールボックスを作成/販売しましたが、矢印は無料です)を使用できます。構文例と出力例は次のとおりです。
davinci( 'arrow', 'X', [0 10], 'Y', [0 2], <plus-lots-of-options> )
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)
重要なのは、quiver
の5th引数:この関数は実際にベクトルフィールドをプロットするために使用されるため、デフォルトのスケーリングを無効にします。 (または、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')
矢印が気に入らない場合は、注釈に戻る必要があります。この回答が役立つ場合があります。
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])
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
似たような結果が得られます:
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)
必要に応じて注釈をグラフにピン留めできるドキュメント化されていない機能があることに注意してください。詳細についてはこちらをご覧ください here ...
他のソリューションの中では、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);
与える