gpt4 book ai didi

python - Quiver 图箭头纵横比

转载 作者:太空狗 更新时间:2023-10-29 20:20:30 25 4
gpt4 key购买 nike

我在使用 Matplotlib 箭袋图时遇到了一些问题。给定一个速度矢量场,我想在流线的顶部绘制速度矢量。向量与预期的流函数不相切。

为了计算流函数,我使用了 Pankratov 博士的 Matlab 代码的 Python 翻译版本,网址为 http://www-pord.ucsd.edu/~matlab/stream.htm。 (我的很快就会在 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.)

产生以下结果来说明我的问题。

Any velocity field and its stream function \Psi, vectors with unexpected aspect ratio

显然计算没有问题,但速度矢量并不像预期的那样与流函数相切。使用精确的保存值,Matlab 生成一个箭袋图,准确显示我想要的内容。在我的例子中,将纵横比设置为 1 可以得到我想要的结果,但会强制轴矩形具有特定的纵横比。

ax = pylab.axes()
ax.set_aspect(1.)

我已经尝试过不同的参数,如“单位”、“角度”或“比例”,但均未成功。

有谁知道如何生成适应 Canvas 纵横比并且仍然与我的轮廓线相切的箭袋图,正如预期的那样?

我希望得到与此类似的结果(请注意矢量如何与流线相切): Any velocity field and its stream function \Psi using Matlab, vectors with expected aspect ratio

非常感谢!

最佳答案

画出你的箭袋 (doc)使用

pylab.quiver(x, y, u, v, angles='xy', scale_units='xy', scale=10)

angles='uv'通过atan2(u,v)设置向量的角度,angles='xy'绘制向量从 (x,y)(x+u, y+v)

关于python - Quiver 图箭头纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12079842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com