Skip to main content
 首页 » 编程设计

python之流图错误 : Cannot convert float NaN to integer

2025年05月04日14bhlsheji

我正在尝试使用 streamplot 函数绘制速度场,但由于某种原因它失败了。这是关于该函数的原始 SO 帖子和示例:how to plot streamlines , when i know u and v components of velocity(numpy 2d arrays), using a plotting program in 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() 

如有任何建议或帮助,我们将不胜感激。

请您参考如下方法:

我认为问题在于你的 (x,y) 网格的密度(你在你的代码中切换了 x 和 y顺便说一句,u 和 v 的初始化)小于 streamplot 网格的密度。当您设置 density=1 或 (1,1)(它们应该是等效的)时,“域被划分为 25x25 网格”。我认为这意味着如果与流图或 x-y 网格的密度相比,您的数据在足够窄的区域中非零,则会进行一些平滑处理。我无法通过增加这些密度(density 或 linspace 间距)来使其工作。但是如果你在边缘处使两列非零,它似乎工作正常。

似乎 streamplot 函数对于这些情况不是很稳健,也许你应该提交一个错误。

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()