5

MATLAB で quiver 関数を使用して x 速度と y 速度をプロットしようとしています。

私は次元100x100のx、y、u、およびv配列(通常の意味を持つ)を持って いる
ので、結果は私の矢筒プロットが密集しており、ズームインしない限り矢印を見ることができません。青の、matlab

私のプロットを見てください: 私の矢筒プロット

quiver プロットの密度を下げる (そして矢印を大きくする) 方法はありますか? x 軸の範囲を 0 ~ 4 にクリップする予定です。しかし、それ以外に何か?

精度の問題でメッシュの密度を下げることはできません。ただし、プロットの見栄えを良くするために必要な場合は、いくつかの細かいデータ ポイントを無視してもかまいません。

4

2 に答える 2

8

たとえば、プロットすることで、少数の矢印をプロットできます (データが配列にあると仮定します)。

quiver(x(1:2:end,1:2:end),y(1:2:end,1:2:end),u(1:2:end,1:2:end),v(1:2:end,1:2:end))

この例の 2 は、4 分の 1 の数の矢印のみをプロットすることを意味します。配列がすべて適切なサイズになるようにすべての 2 を変更する限り、もちろん変更できます。

矢印の長さを変更したい場合、2 つのオプションがあります。まず、scale オプションを使用して、scale=2指定した量だけ矢印をスケーリングするか、すべての矢印を同じ長さにしたい場合は速度を正規化できます。矢印を見ても速度の大きさを比較できないため、そうすると情報が失われますが、状況によっては役立つ場合があります。これは、矢印をプロットしたいポイントで、uおよびv両方で割ることによって行うことができます。sqrt(u.^2+v.^2)

それがすべてをうまく設定してくれることを願っています。

于 2013-10-30T22:21:21.040 に答える
1

行列をより疎にするために、間隔の値を少し大きくする必要があります。

これは非常に密集しています:

1:0.0001:100

これは非常にまばらです:

1:1:100

編集:

Image Processing Toolkit がある場合は、関数imresizeを使用して行列の解像度を下げることができます。

newMat = imresize(oldMat, newSize); 

ツールボックスがない場合は、補間を使用してこの例と同様の方法でサイズを変更できます。interp2

orgY = 1:size(oldMat,1); 
orgX = 1:size(oldMat,2); 
[orgX,orgY] = meshgrid(orgX ,orgY); 
newY = linspace(1,size(mat,1),newHeight); 
newX = linspace(1,size(mat,2),newWidth); 
[newX,newY] = meshgrid(newX,newY); 
newMat = interp2(orgX,orgY,mat,newX,newY);

@David のおかげで、個々のポイントをいくつか取り除きたい場合は、次のように簡単に実行できます。

xPlot=x(1:2:end)
于 2013-10-30T06:16:38.813 に答える