Streamplot 错误:无法将浮点 NaN 转换为整数
我正在尝试使用streamplot函数来绘制速度场,但不知道为什么它失败了。这里有一个关于这个函数的原始StackOverflow帖子,里面有个例子:如何在知道速度的u和v分量(numpy 2D数组)的情况下,用Python的绘图程序绘制流线?。这个例子对我来说运行得很好;然而,我尝试修改一些数值,以简化函数并模拟初始条件,但现在它不再工作了。
这是我“简化”后的代码:
import matplotlib.pyplot as plt
import numpy as np
from streamplot import streamplot
x = np.linspace(0, 1, 10)
y = np.linspace(0, 2, 10)
u = np.zeros((len(x), len(y)))
v = np.zeros((len(x), len(y)))
u[:,len(y)-1]=1
speed = np.sqrt(u*u + v*v)
plt.figure()
plt.subplot(121)
streamplot(x, y, u, v,density=1, INTEGRATOR='RK4', color='b')
plt.subplot(122)
streamplot(x, y, u, v, density=(1,1), INTEGRATOR='RK4', color=u,
linewidth=5*speed/speed.max())
plt.show()
任何建议或帮助都非常感谢。
1 个回答
0
我觉得问题在于你的 (x,y)
网格的密度(顺便说一下,你在初始化 u
和 v
的时候把 x
和 y
搞混了)比 streamplot
网格的密度要低。当你设置 density=1
或者 (1,1)
(这两个应该是一样的)时,“这个区域被划分成了一个 25x25 的网格”。我觉得这意味着如果你的数据在某个很窄的区域内不为零,而这个区域的密度又比 streamplot
或者你的 x-y
网格要小,就会出现一些平滑处理的情况。我尝试通过增加这些密度(density
或 linspace
的间距)来解决这个问题,但没有成功。不过如果你在边缘上让 两个 列不为零,似乎就能正常工作了。
看起来 streamplot
函数在这些情况下不是很稳定,也许你应该提交一个bug报告。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 1, 10)
y = np.linspace(0, 2, 10)
u = np.zeros((y.size, x.size))
v = np.zeros((y.size, x.size))
u[:,-2:] = 1
speed = np.sqrt(u*u + v*v)
plt.figure()
plt.subplot(121)
plt.streamplot(x, y, u, v,density=1, color='b')
plt.subplot(122)
plt.streamplot(x, y, u, v, density=(1,1), color=u, linewidth=5*speed/speed.max())
plt.show()