MATLABのquiver3
プロットの各矢印の色を、各矢印の大きさに対応させたいと思います。それを行う方法はありますか?
2D quiver
でこれを実行できる例をオンラインでいくつか見ましたが、3Dバリアントquiver3
では機能しません。
次のプロットがあり、青い矢印をその大きさに対応する色に置き換えたいと思います。
R2014b以降のバージョンを使用している場合は、文書化されていない機能を使用して、各線と頭の色を変更できます。
figure
[x,y] = meshgrid(-2:.5:2,-1:.5:1);
z = x .* exp(-x.^2 - y.^2);
[u,v,w] = surfnorm(x,y,z);
h=quiver3(x,y,z,u,v,w);
s = size(x);
nPoints = s(1)*s(2);
% create a colour map
cmap = parula(nPoints);
% x2 because each point has 2 points, a start and an end.
cd = uint8(repmat([255 0 0 255]', 1, nPoints*2));
count = 0;
% we need to assign a colour per point
for ii=1:nPoints
% and we need to assign a colour to the start and end of the
% line.
for jj=1:2
count = count + 1;
cd(1:3,count) = uint8(255*cmap(ii,:)');
end
end
% set the colour binding method and the colour data of the tail
set(h.Tail, 'ColorBinding','interpolated', 'ColorData',cd)
% create a color matrix for the heads
cd = uint8(repmat([255 0 0 255]', 1, nPoints*3));
count = 0;
% we need to assign a colour per point
for ii=1:nPoints
% and we need to assign a colour to the all the points
% at the head of the arrow
for jj=1:3
count = count + 1;
cd(1:3,count) = uint8(255*cmap(ii,:)');
end
end
% set the colour binding method and the colour data of the head
set(h.Head, 'ColorBinding','interpolated', 'ColorData',cd)
注:私は大きさについて巧妙なことは何もしておらず、元のマトリックスの順序に基づいて各矢筒の色を変更するだけですが、この「機能」の使用方法については理解できるはずです。