質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Q&A

解決済

1回答

4769閲覧

matplotlibのquiverのscaleの定義が分からない

ruei

総合スコア284

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

0グッド

0クリップ

投稿2018/08/21 16:01

matplotlibのquiverを使ってベクトル場のアニメーションを作ろうとしています。
そこで、ベクトルの大きさのスケールバーをアニメーションに付与したいと思っています。
デフォルトでは各画像ごとにベクトルの大きさが自動で変形されているので、
オプションでscaleをつけようと思っています。具体的には

python

1X,Y=np.meshgrid(np.arange(-1000,1000,200/3),np.arange(-1000,1000,200/3)) 2U=np.empty((30,30),float) 3V=np.empty((30,30),float) 4<U,Vに各点でのベクトルを代入> 5plt.quiver(X,Y,U,V,color='red',scale=15) 6plt.savefig('name'+<time>+'.png') 7plt.close()

という感じでしています。ここで、scaleの役割が何となくしかわかっていません。
特に英語力がなさ過ぎて、ドキュメント(https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.quiver.html)が何を言っているのかわかりません。上の例では、XY座標における長さ15をベクトル(U,V)の長さ1として扱う、つまり、例えば(U,V)=(1,1)はプロットされるときにベクトル(15,15)として、XY平面に図示されるという理解であっていますか?ドキュメントのNumber of data units per arrow length unitの意味が分かっていません。
すみません、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

なかなか独特の挙動になるようですね。

この数字を単位にして測るということのようです。scaleで割られるのですね。現象としては「a smaller scale parameter makes the arrow longer. 」なのですが、他の引数と連動して挙動が変わるようです。

scale_units : [ 'width' | 'height' | 'dots' | 'inches' | 'x' | 'y' | 'xy' ], None, optional
If the scale kwarg is None, the arrow length unit. Default is None.

e.g. scale_units is 'inches', scale is 2.0, and (u,v) = (1,0), then the vector will be 0.5 inches long.
If scale_units is 'width'/'height', then the vector will be half the width/height of the axes.
If scale_units is 'x' then the vector will be 0.5 x-axis units. To plot vectors in the x-y plane, with u and v having the same units as x and y, use angles='xy', scale_units='xy', scale=1.

matplotlib.axes.Axes.quiver — Matplotlib 2.2.3 documentation

おそらく"xy"を使うのが簡単でしょう。

「To plot vectors in the x-y plane, with u and v having the same units as x and y, use angles='xy', scale_units='xy', scale=1」と言っているので、angles,scale_units,scaleをそのように設定してあげると(15, 15)が(15,15)にプロットされるようです。ここでscale=15にすると(1,1)にplotされます、という挙動です。

投稿2018/08/21 16:54

編集2018/08/21 16:56
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruei

2018/08/22 01:34

なるほど。自分のやり方は間違っていたようですね(図の縮尺が変化した)。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問