振動プロットのデフォルトの矢印のスタイルを変更したいのですが。どうすれば変更できますか?
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の場合
矢筒プロットは修正が困難です。 @Luis Mendoが言ったように、matlabインストール内で震え機能を変更できます。ただし、プログラムでニースパッチ/ラインを使用して矢印を描画する複雑さによって制限されます。 annotation
を使用する方が簡単な場合があります-headStyle
プロパティをcback1
に設定する「Quiver-注釈」サブプロットを参照してください。
注釈 は、プロットが完了したら手で簡単に挿入できるグラフィカルオブジェクト(線、テキストボックス、矢印など)です。たとえば、追加のテキストを表示したり、特定の領域をポイントしたりします。また、それらの位置を定義することにより、プログラムで挿入することもできます-それが私たちが取るオプションです。最初に通常のquiver
プロット(左パネル)を描画し、青い線のX
およびY
データを取得し、これらの座標を使用して注釈矢印を挿入します。まったく同じ場所に表示されます(同じ位置、同じ角度、同じサイズ、右パネル)。
注釈矢印には、Color
、HeadWidth
、HeadLength
、HeadStyle
など、簡単に変更できるいくつかのNiceプロパティがあります。次のプロットでは、x軸に対する角度と、長さに依存するheadWidth
に応じて、各矢印の色を変更しました。
次の写真
によって生成されます
%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');
ファイル refresh.m
フォルダーにある...\MATLAB\...\toolbox\matlab\specgraph\@specgraph\@quivergroup\@quivergroup
には次の行が含まれます。
%// Arrow head parameters
alpha = .33; %// Size of arrow head relative to the length of the vector
beta = .25; %// Width of the base of the arrow head relative to the length
alpha
およびbeta
の値を変更すると、目的の効果が得られます。
ただし、これにはMatlabのファイルの変更が伴うため、お勧めしません。その場合は、元のrefresh.m
ファイル。
quiver
のヘルプに表示されるサンプルコードを使用した結果:
[x,y] = meshgrid(-2:.2:2,-1:.15:1);
z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.15);
quiver(x,y,px,py), hold off, axis image
元のパラメーター(alpha = .33;
beta = .25;
):
alpha = .5;
beta = .5;
:
ここから開始できます:
http://www.mathworks.com/help/matlab/ref/quiver.html
そして、ここでquiverの利用可能なプロパティを探すことができます:
http://www.mathworks.com/help/matlab/ref/quivergroupproperties.html
たとえば、プロパティMaxHeadSizeを使用すると、矢印のサイズを変更できます。
EDIT:このリンクの詳細: 矢印のプロパティ
一番下で読む
注釈を選択してから[Mコードを表示]を選択すると、関数またはスクリプトに挿入して注釈を再現できるコードスニペットを取得できます。
pablo1977 のこの答えは、私にとって最も有益なものでした。矢筒グループのプロパティを調整することで、つまり次の2行のコードで、より大きな矢印を取得できました。
h = quiver(...);
set(h,'MaxHeadSize',1e2,'AutoScaleFactor',1);