Python 流程图错误:无法将浮点NaN转换为整数

Python 流程图错误:无法将浮点NaN转换为整数,python,matplotlib,plot,Python,Matplotlib,Plot,我试图使用streamplot函数来绘制速度场,但由于某种原因,它失败了。下面是一篇关于函数的原始SO帖子,其中有一个示例:。这个例子对我来说很好;然而,我试图修改这些值来简化函数和模拟初始条件,但现在它不再工作了 以下是我的“简化”代码: 任何建议或帮助都将不胜感激。我认为问题在于(x,y)网格的密度(顺便说一句,您在u和v的初始化中切换了x和y)小于流图网格的密度。当您设置density=1或(1,1)(它们应该是等效的)时,则“域被划分为25x25网格”。我认为这意味着,如果与流线图或x-

我试图使用streamplot函数来绘制速度场,但由于某种原因,它失败了。下面是一篇关于函数的原始SO帖子,其中有一个示例:。这个例子对我来说很好;然而,我试图修改这些值来简化函数和模拟初始条件,但现在它不再工作了

以下是我的“简化”代码:


任何建议或帮助都将不胜感激。

我认为问题在于
(x,y)
网格的密度(顺便说一句,您在
u
v
的初始化中切换了
x
y
)小于
流图
网格的密度。当您设置
density=1
(1,1)
(它们应该是等效的)时,则“域被划分为25x25网格”。我认为这意味着,如果与流线图或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()

欢迎来到SO!。为了让我们能更好地帮助您,您需要在您的问题中提供足够的信息来帮助我们。它怎么不再工作了?它是否给了您任何错误(如果是,请粘贴整个错误)?您是否尝试使用matplotlib中的streamplot?不要从streamplot导入streamplot,尝试使用
plt。streamplot
您的v向量为0,u向量为0,除了最后一列,您希望从中得到什么类型的“流”?你确定这些值是正确的吗?tcaswell:因为数组中有零,所以我得到一个错误,而在示例中,因此数组都是非零的,并且没有错误。Rutger:是的,这些是正确的。我试着让它工作,这样我就可以用它来制作一个速度场随时间变化的动画。初始条件为零;然而,随着时间的推移,大部分场变为非零。为了简化,我省略了其余的代码。问:非常感谢,我真的很感激。结果很好(见结果)。再次感谢@威廉:我的荣幸,谢谢你展示结果:但这个链接似乎对我不起作用。奇怪的是,它对我有效。试试这个或这个。对于任何感兴趣的人来说,问题在于盖子驱动的空腔流动。盒子里有液体,顶部以恒定的速度移动(造成中间的漩涡)。压力在背面绘制为一个等高线。它们现在都可以工作了,包括原始的。很酷!
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()