Matplotlibの震動プロットに問題があります。速度ベクトル場が与えられると、私は流線の上に速度ベクトルをプロットしたいと思う。ベクトルは、期待通りにストリーム関数に接していません。矢印プロット矢印のアスペクト比
ストリーム関数を計算するには、http://www-pord.ucsd.edu/~matlab/stream.htmで利用可能なDr. PankratovのMatlabコードのPython翻訳バージョンを使用します(私はすぐにGitHubで利用できます)。私の問題を説明するために、次の結果を生成するために
import numpy
import pylab
# Regular grid coordineates, velocity field and stream function
x, y = numpy.meshgrid(numpy.arange(0, 21), numpy.arange(0, 11))
u = numpy.array([[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30],
[ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29],
[ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28],
[ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27],
[ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26],
[ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25],
[ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24],
[ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23],
[ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22],
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21],
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20]])
v = numpy.array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20],
[ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19],
[ -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18],
[ -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17],
[ -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16],
[ -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15],
[ -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14],
[ -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5,
6, 7, 8, 9, 10, 11, 12, 13],
[ -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12],
[ -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11],
[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, 10]])
psi = numpy.array([[ 0. , 0.5, 2. , 4.5, 8. , 12.5, 18. , 24.5,
32. , 40.5, 50. , 60.5, 72. , 84.5, 98. , 112.5,
128. , 144.5, 162. , 180.5, 200. ],
[ -9.5, -10. , -9.5, -8. , -5.5, -2. , 2.5, 8. ,
14.5, 22. , 30.5, 40. , 50.5, 62. , 74.5, 88. ,
102.5, 118. , 134.5, 152. , 170.5],
[ -18. , -19.5, -20. , -19.5, -18. , -15.5, -12. , -7.5,
-2. , 4.5, 12. , 20.5, 30. , 40.5, 52. , 64.5,
78. , 92.5, 108. , 124.5, 142. ],
[ -25.5, -28. , -29.5, -30. , -29.5, -28. , -25.5, -22. ,
-17.5, -12. , -5.5, 2. , 10.5, 20. , 30.5, 42. ,
54.5, 68. , 82.5, 98. , 114.5],
[ -32. , -35.5, -38. , -39.5, -40. , -39.5, -38. , -35.5,
-32. , -27.5, -22. , -15.5, -8. , 0.5, 10. , 20.5,
32. , 44.5, 58. , 72.5, 88. ],
[ -37.5, -42. , -45.5, -48. , -49.5, -50. , -49.5, -48. ,
-45.5, -42. , -37.5, -32. , -25.5, -18. , -9.5, 0. ,
10.5, 22. , 34.5, 48. , 62.5],
[ -42. , -47.5, -52. , -55.5, -58. , -59.5, -60. , -59.5,
-58. , -55.5, -52. , -47.5, -42. , -35.5, -28. , -19.5,
-10. , 0.5, 12. , 24.5, 38. ],
[ -45.5, -52. , -57.5, -62. , -65.5, -68. , -69.5, -70. ,
-69.5, -68. , -65.5, -62. , -57.5, -52. , -45.5, -38. ,
-29.5, -20. , -9.5, 2. , 14.5],
[ -48. , -55.5, -62. , -67.5, -72. , -75.5, -78. , -79.5,
-80. , -79.5, -78. , -75.5, -72. , -67.5, -62. , -55.5,
-48. , -39.5, -30. , -19.5, -8. ],
[ -49.5, -58. , -65.5, -72. , -77.5, -82. , -85.5, -88. ,
-89.5, -90. , -89.5, -88. , -85.5, -82. , -77.5, -72. ,
-65.5, -58. , -49.5, -40. , -29.5],
[ -50. , -59.5, -68. , -75.5, -82. , -87.5, -92. , -95.5,
-98. , -99.5, -100. , -99.5, -98. , -95.5, -92. , -87.5,
-82. , -75.5, -68. , -59.5, -50. ]])
# The plots!
pylab.close('all')
pylab.ion()
pylab.figure(figsize=[8, 8])
pylab.contour(x, y, psi, 20, colors='k', linestyles='-', linewidth=1.0)
pylab.quiver(x, y, u, v, angles='uv', scale_units='xy', scale=10)
ax = pylab.axes()
ax.set_aspect(1.)
:その結果を使用して
は、私はこのコードを使用します。
どうやら計算は細かいですが、期待通りの速度ベクトルは、流れ関数の接線ではありません。正確なセーブ値を使用して、Matlabは私が望むものを正確に示す震度プロットを生成します。私の場合、アスペクト比を1に設定すると希望の結果が得られますが、Axesの矩形は特定のアスペクト比になります。
ax = pylab.axes()
ax.set_aspect(1.)
私は既に 'units'、 'angles'、 'scale'などの異なる引数を試していません。
誰もがキャンバスのアスペクト比に適応し、予測どおり輪郭線にまだ接している、震えプロットを生成する方法を知っていますか?
私は(ベクトルはストリームラインに接しているかに注意してください)。このように、同様の結果を期待する:
おかげでたくさん! atan2(u,v)
によってベクトルの角度を設定しますangles='uv'
pylab.quiver(x, y, u, v, angles='xy', scale_units='xy', scale=10)
を使用して
にベクトルを描くありがとうございました!私はもっと多くのオプションを試してみたはずです。 – regeirk