Streamplot错误:无法将float NaN转换为整数

时间:2013-02-15 15:28:47

标签: python matplotlib plot

我正在尝试使用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()

感谢任何建议或帮助。

1 个答案:

答案 0 :(得分:0)

我认为问题在于(x,y)网格的密度(您在初始化xy时已切换uv顺便说一下)小于streamplot网格的密度。当您设置density=1(1,1)(它们应该是等效的)时,“域被划分为25x25网格”。我认为这意味着如果你的数据在足够小的区域内非零而且与streamplot或你的x-y网格的密度相比,那么会有一些平滑。我无法通过增加密度(densitylinspace间距)来使其工作。但是如果你在边缘处使两个列非零,那么它似乎工作正常。

看起来像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()