21

震えプロットのデフォルトの矢頭スタイルを変更したいと思います。どうすれば変更できますか?

4

5 に答える 5

24

Matlab バージョン > R2014b の場合

R2014b バージョン以降、Matlab はグラフィカル コンポーネントの構造を変更しました。以下は、Matlab の注釈を使用する最新のコードです。

ここに画像の説明を入力

によって生成されます

headWidth = 8;
headLength = 8;
LineLength = 0.08;

%some data
[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;

%quiver plots
figure('Position',[10 10 1000 600],'Color','w');
hax_1 = subplot(1,2,1);
hq = quiver(x,y,u,v);           %get the handle of quiver
title('Regular Quiver plot','FontSize',16);

%get the data from regular quiver
U = hq.UData;
V = hq.VData;
X = hq.XData;
Y = hq.YData;

%right version (with annotation)
hax_2 = subplot(1,2,2);
%hold on;
for ii = 1:length(X)
    for ij = 1:length(X)

        headWidth = 5;
        ah = annotation('arrow',...
            'headStyle','cback1','HeadLength',headLength,'HeadWidth',headWidth);
        set(ah,'parent',gca);
        set(ah,'position',[X(ii,ij) Y(ii,ij) LineLength*U(ii,ij) LineLength*V(ii,ij)]);

    end
end
%axis off;
title('Quiver - annotations ','FontSize',16);

linkaxes([hax_1 hax_2],'xy');

このコードは、行の長さのヘッド スタイルとコントロールを変更することに注意してください (左側のパネルでは、右側のサブプロットではなく、左側のサブプロットの左上部分で矢印が重なっていることがわかります)。 )。矢じりの長さと幅は変更されません。

この編集では、角度をコード化した配色を維持せず、動的な頭のサイズを破棄しました。それは物事をより明確にします。


Matlab バージョン < R2014b の場合

Quiver プロットは変更が困難です。@Luis Mendo が言ったように、matlab インストール内で震え関数を変更できます。ただし、適切なパッチ/ラインを使用してプログラムで矢印を描画することの複雑さによって、依然として制限されます。を使用した簡単なルートがあるかもしれません-プロパティを にannotation設定する「Quiver - 注釈」サブプロットを参照してください。headStylecback1

注釈は、プロットが完了したら手動で簡単に挿入できるグラフィック オブジェクト (線、テキスト ボックス、矢印など) です。たとえば、追加のテキストを表示したり、特定の領域をポイントしたりします。それらの位置を定義することにより、プログラムでそれらを挿入することもできます - そしてそれが私たちがとるオプションです。最初に通常のquiverプロットを描画し (左パネル)、青い線XYデータを取得し、これらの座標を使用して注釈矢印を挿入します。それぞれがまったく同じ位置 (同じ位置、同じ角度、同じサイズ、右パネル) に表示されます。 )。

注釈矢印には、 、 、 、 などColor、簡単に変更できる優れたプロパティがいくつかあります。次のプロットでは、x 軸に対する角度に応じて各矢印の色を変更しました。これは長さに依存します。HeadWidthHeadLengthHeadStyleheadWidth

次の写真

ここに画像の説明を入力

によって生成されます

%some data
[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;

%quiver plots
figure('Position',[10 10 1000 600],'Color','w');
hax_1 = subplot(1,2,1);

%left version (regular)
hq1 = quiver(x,y,u,v);

%get the line position (first handle)
hkid = get(hq1,'children');
X = get(hkid(1),'XData');
Y = get(hkid(1),'YData');
axis off;
title('Quiver - regular ','FontSize',16);

%right version (with annotation)
hax_2 = subplot(1,2,2);
cmap = jet(116); %colormap, 116 because angles goes up to 115 degrees

for ii = 1:3:length(X)-1

    headWidth = 200 * sqrt((X(ii+1)-X(ii)).^2 + (Y(ii+1)-Y(ii)).^2); % set the headWidth, function of length of arrow
    angled = floor(atan2(Y(ii+1)-Y(ii),X(ii+1)-X(ii))*180/pi) + 1; %get the angle
    ah = annotation('arrow',...
        'Color', cmap(angled,:),...
        'headStyle','cback1','HeadLength',50,'HeadWidth',headWidth);
    set(ah,'parent',gca);
    set(ah,'position',[X(ii) Y(ii) X(ii+1)-X(ii) Y(ii+1)-Y(ii)]);
end
axis off;
title('Quiver - annotations ','FontSize',16);

linkaxes([hax_1 hax_2],'xy');
于 2013-09-13T01:27:52.193 に答える
2

pablo1977のこの回答は、私にとって最も有益でした。震えグループのプロパティを調整することで、つまり次の 2 行のコードを使用して、矢印の頭を大きくすることができました。

h = quiver(...);
set(h,'MaxHeadSize',1e2,'AutoScaleFactor',1);
于 2014-11-18T09:01:44.807 に答える