2

我正在尝试使用 streamplot 函数来绘制速度场,但由于某种原因它失败了。这是一个关于该函数的原始 SO 帖子,带有一个示例:如何绘制流线,当我知道速度的 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()

任何建议或帮助表示赞赏。

4

1 回答 1

0

我认为问题在于您的网格的密度(顺便说一下,您在and的初始化中(x,y)已经切换x和)小于网格的密度。当您设置或(它们应该是等效的)时,“域被划分为 25x25 网格”。我认为这意味着如果与流图或 xy 网格的密度相比,如果您的数据在足够窄的区域中非零,则会进行一些平滑处理。我无法通过增加这些密度(或间距)来使其工作。但是如果你在边缘使列非零,它似乎工作正常。yuvstreamplotdensity=1(1,1)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()
于 2013-02-17T16:53:32.683 回答