6

私は自分の図にMatlabで矢印を描こうとしていますが、それらはすべてひどく見えます。また、矢じりを V ではなく、塗りつぶした三角形にしたいと考えています。

Matlab File Exchange で利用可能なパッケージを使用してみました: arrow、arrows、arrows3、およびおそらく少なくとも 1 つの他のパッケージ。

Matlab の Figure エディターで手動で矢印を作成してみましたが、線幅を調整すると、矢印は次のようになります。

ここに画像の説明を入力

注釈コマンドを使用して、上の矢印を作成しました。

annotation(gcf,'arrow',[0.621875 0.457916666666667],...
                       [0.205421152030217 0.40755429650614],...
                       'HeadLength',4,'LineWidth',5);

ここで入手可能な矢印パッケージを使用しようとした結果は次のとおりです: Arrow.m (下の矢印の頭が線に対して垂直ではないことに注意してください:

ここに画像の説明を入力

私も次のことを試してみましたが、これが以下の結果です(ひどい見た目の矢印に注意してください):

 figure
 plot(1:10, 1:10)
 annotation(gcf,'arrow',[0.621875 0.457916666666667],...
                        [0.205421152030217 0.40755429650614],...
                        'HeadLength',4,'LineWidth',5);

ここに画像の説明を入力

4

7 に答える 7

4

ベクター グラフィックスは難しいです。Matlab のタイポグラフィも同様に悪いですが、単純化したテキスト ベースのソリューションを次に示します (Matlab でこの種の注釈を行うことはこれ以上拒否します)。

figure
plot(1:10, 1:10)
text(5,4,'\rightarrow','FontSize',54,'Rotation',135,...
         'HorizontalAlignment','center');

このような図が得られます

                        ここに画像の説明を入力

ゼロ度の方向を指しているため、使用したことに注意してください'\leftarrow'。これにより、頭の中で計算が容易になります。これは定型的な解決策ではありません。Matlab がこれをテキストとして配置しているという事実を克服するために、位置をいじる必要があります ('Extent'および'Margin'プロパティを参照)。当然のことながら、小さな不具合が見られる場合があります。LaTeX インタープリターを使用して、異なるスタイルの矢じりを取得できます。

    text(5,4,'$\rightarrow$','FontSize',54,'Rotation',135,...
             'HorizontalAlignment','center','Interpreter','latex');

このオプションでは小さな問題は発生しませんが、矢印は異なって見えます (代替可能な他の LaTeX 矢印スタイルが存在する可能性があります)。フォントを変更することも影響する可能性があり、他のテキストベースの矢印を使用できることは確かです。矢印の追加の詳細については、The MathWorks のこの記事を参照してください。

于 2013-08-13T17:41:15.593 に答える
2

Matlab を 10 年以上使用しており、プロットの品質 (ビットマップへのアンチエイリアス出力、見栄えの良い eps ファイルなど) がほとんど進歩していないのを見て、私の長年の解決策がここにあると判断しました。見栄えの良い矢印の例をいくつかここに、より美しいグラフをここに示します。残念ながら、ツールボックスの中には、numpy/scipy/matplotlib に完全にアクセスできないものがあります。これは答えというよりも暴言であることは知っていますが、それが私の解決策です...

于 2013-08-13T18:46:39.557 に答える
1

InkScape をインストールして、そこに矢印を描画することにしました。シンプルさと品質に勝るものはありません。

InkScape ウェブサイト

于 2014-07-17T16:00:37.623 に答える
0

ラインベースの矢印が失敗した場合は、いつでもパッチベースの矢印を試すことができます:

xArrow = [0 1 1 1.2 1 1 0];               % X-coords of arrow edge points
yArrow = [-0.1 -0.1 -0.2 0 0.2 0.1 0.1];  % Y-coords of arrow edge points
hArrow = fill(xArrow,yArrow, [1 0 0]);    % Plot a red arrow
axis equal                                % Set axis tick marks to be equal

ここに画像の説明を入力

作業は増えますが、上記をパラメータ化して、矢印のスケーリング、縦横比、回転、および位置を調整するための多数の引数を取る関数にすることができます。色、エッジ ラインの色、アルファ透明度を調整することもできます。

この種のアイデアは、François BeauducelによってFile Exchange に提出されたARROWS: generalized 2-D arrows plotで実装されたようです。

于 2013-08-13T17:41:46.903 に答える
0

DaVinci Draw ツールボックス(完全な開示: 私はツールボックスを作成/販売しています) があり、低レベルの Matlab コマンドを使用して、plot()およびのようなpatch()中間レベルの形状を矢印のように描画します。構文例:

davinci( 'arrow', 'X',           [0 10],      ...
                  'Y',           [0 2],       ...
                  'Shaft.Width', 1,           ...
                  'Head.Length', 2.5,         ...
                  'Color',       'w',         ...
                  'EdgeColor',   'k',         ...
                  'LineWidth',   2.5 )

ドキュメントから:

ダヴィンチの矢

于 2015-10-15T17:51:24.903 に答える