我正在尝试使用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()
感谢任何建议或帮助。
答案 0 :(得分:0)
我认为问题在于(x,y)
网格的密度(您在初始化x
和y
时已切换u
和v
顺便说一下)小于streamplot
网格的密度。当您设置density=1
或(1,1)
(它们应该是等效的)时,“域被划分为25x25网格”。我认为这意味着如果你的数据在足够小的区域内非零而且与streamplot或你的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()