【问题标题】:Streamplot error: Cannot convert float NaN to integer流图错误:无法将浮点 NaN 转换为整数
【发布时间】:2013-02-20 02:16:02
【问题描述】:

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

感谢任何建议或帮助。

【问题讨论】:

  • 欢迎来到 SO!。为了让我们为您提供最好的帮助,您需要在您的问题中提供足够的信息来帮助我们。 如何它不再起作用了?它是否给您任何错误(如果有,请粘贴 whole 错误)?
  • 您是否尝试过使用 matplotlib 中的流图?不要从流图中导入流图,而是尝试使用plt.streamplot
  • 您的 v-vector 为 0,而您的 u-vector 除了最后一列之外为 0,您希望从中得到什么样的“流”?你确定这些值是正确的吗?
  • tcaswell:因为数组中有零,所以我得到一个错误,而在 SO 的示例中,数组都是非零的,并且没有错误。
  • Rutger:是的,这些都是正确的。我试图让这个工作,所以我可以用它来制作一个随着时间的推移速度场的动画。初始条件涉及零;然而,随着时间的推移,该领域的大部分变得非零。为了简化,我省略了其余代码。

标签: python matplotlib plot


【解决方案1】:

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

对于这些情况,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()

【讨论】:

  • askewchan:非常感谢,非常感谢。结果很完美(结果见here)。再次感谢!
  • @William 很高兴,感谢您显示结果:但该链接似乎对我不起作用。
  • 很奇怪,它对我有用。试试这个one 或这个one。对于任何感兴趣的人,问题是盖子驱动的腔体流动。盒子里有液体,顶部以恒定速度移动(导致中间出现漩涡)。压力在背面绘制为等高线。
  • @William 他们现在都可以工作了,包括原来的。很酷!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2015-09-10
相关资源
最近更新 更多