quiverの表示範​囲をaxesの大きさ​に固定することは可能​ですか?

ベクトルを対応する画像のピクセルに割り当てて表示したいと考えています。
大きさの同じaxesを2個重ねて画像の上に表示させていますが、ベクトルの大きさによってベクトルの表示間隔が変化してしまい、結果として対応するピクセルと位置がずれて表示されてしまいます。
quiverの表示範囲をaxesの大きさに固定する方法ありますか?
quiverのグリットと画像のピクセル数は同じにしています。

 Accepted Answer

michio
michio on 17 Dec 2017
Edited: michio on 17 Dec 2017

0 votes

quiver 関数の scale オプションだといかがですか?
引用:"自動的なスケーリングを使用せずに速度ベクトルをプロットするには、scale = 0 を使用してください。" https://jp.mathworks.com/help/matlab/ref/quiver.html

4 Comments

Yuuki Satou
Yuuki Satou on 19 Dec 2017
scaleの値を0にして実行するとベクトル同士が重なり合う乱雑な状態になってしまいます。 グリッドの大きさもベクトルの大きさに反比例して縮小してしまいます。
問題点を理解できていなかった気がしています。ごめんなさい。
"quiverの表示範囲をaxesの大きさに固定する方法ありますか?"
というのは、表示される矢印の向きと大きさによって表示範囲がその都度変化してしまうことをおっしゃっていますか?
例えば
[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;
quiver(x,y,u,v)
だと y 軸の表示範囲は 0-2.5 ですが、
quiver(x,y,u,v,5)
とすると 0 - 3.5 に変化するといったように。
これは quiver の実行方法ではどうしようもないので、表示した後にそれぞれの軸の表示範囲を明示的に指定するコマンドを入れておくのが良いかと思います。
h = gca;
quiver(x,y,u,v,5)
h.XLim = [0,2];
h.YLim = [0,2.5];
いかがでしょうか。
複数の quiver 実行間で、矢印の相対的な大きさを正しく表示させるには、やはり scaleの値を0にして自動スケールをオフにする必要があるかと思います。
その際に、与える値が大きいと"ベクトル同士が重なり合う乱雑な状態"になってしまうかと思いますので、例えば
scale = 0.4;
quiver(x,y,u*scale,v*scale,0)
と、入力値を共通の値で直接小さくするなど試してみてください。
Yuuki Satou
Yuuki Satou on 22 Dec 2017
入力値を小さくするのとXLim,YLimを直接指定するのを両方試してました。 入力値に関わらず同じ位置に表示することができました。
ご協力ありがとうございました。

Sign in to comment.

More Answers (0)

Products

Asked:

on 15 Dec 2017

Commented:

on 22 Dec 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!