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

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

 Akzeptierte Antwort

michio
michio am 17 Dez. 2017
Bearbeitet: michio am 17 Dez. 2017

0 Stimmen

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

4 Kommentare

Yuuki Satou
Yuuki Satou am 19 Dez. 2017
scaleの値を0にして実行するとベクトル同士が重なり合う乱雑な状態になってしまいます。 グリッドの大きさもベクトルの大きさに反比例して縮小してしまいます。
michio
michio am 20 Dez. 2017
問題点を理解できていなかった気がしています。ごめんなさい。
"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];
いかがでしょうか。
michio
michio am 21 Dez. 2017
複数の quiver 実行間で、矢印の相対的な大きさを正しく表示させるには、やはり scaleの値を0にして自動スケールをオフにする必要があるかと思います。
その際に、与える値が大きいと"ベクトル同士が重なり合う乱雑な状態"になってしまうかと思いますので、例えば
scale = 0.4;
quiver(x,y,u*scale,v*scale,0)
と、入力値を共通の値で直接小さくするなど試してみてください。
Yuuki Satou
Yuuki Satou am 22 Dez. 2017
入力値を小さくするのとXLim,YLimを直接指定するのを両方試してました。 入力値に関わらず同じ位置に表示することができました。
ご協力ありがとうございました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Community Treasure Hunt

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

Start Hunting!