当我知道u和v组件的速度(numpy 2d数组)时,如何使用python中的绘图程序绘制流线图?

时间:2011-11-28 13:39:29

标签: python numpy matplotlib scipy velocity

我希望标题本身很清楚,我正在使用分步法,有限差分公式(Navier-Stokes原始变量形式)解决2D盖驱动腔(方域)问题,我有u和v组件整个领域的速度,没有手动计算流线,是否有一个命令或绘图工具为我做这个工作?

我希望这个问题与编程有关,因为我需要一个绘制流线图的工具而不需要明确地计算它们。

我已经在流 - 涡度NS形式中解决了同样的问题,我只需要采用流函数的等高线图来获得流线型。

我希望工具或绘图仪是一个python库,并且更多可以在fedora中安装(我可以妥协并使用薄荷)而不用大惊小怪!

如果有人指出图书馆和相关命令(会节省很多时间),我将不胜感激。

3 个答案:

答案 0 :(得分:23)

看看Tom Flannaghan's streamplot functionrelevant thread on the user's list is here,还有另一个similar code snippet by Ray Speth,它们做的事情略有不同。

如果您遇到速度问题,使用某些scipy的集成功能而不是这两个示例中使用的纯numpy集成函数可能更有效。但是,我没有尝试过,这些故意避免依赖scipy。与scipy)相比,{numpy是一个相当重的依赖

从它的示例情节:

import matplotlib.pyplot as plt
import numpy as np
from streamplot import streamplot

x = np.linspace(-3,3,100)
y = np.linspace(-3,3,100)
u = -1-x**2+y[:,np.newaxis]
v = 1+x-y[:,np.newaxis]**2
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()

enter image description here

另一种选择是使用VTK。它是加速3D绘图,因此制作2D绘图需要正确设置相机(这不是太难),并且您将无法获得矢量输出。

Mayavi,tvtk和mlab为VTK提供pythonic包装器。它具有许多功能。

使用VTK绘制numpy数组流线的最简单方法是使用mayavi.mlab.flow。我暂时会跳过一个例子,但是如果你想探索使用VTK这样做,我可以添加一个。

答案 1 :(得分:4)

在Matplotlib的1.2版本中,现在有一个streamplot函数。

答案 2 :(得分:3)