绘制python中的方向字段

时间:2016-09-21 14:15:11

标签: python matlab numpy matplotlib scipy

我想为一个简单的等式绘制方向场:

y'  = 3 − 2y

我发现了类似的Matlab问题here(1.3)。但我不知道如何将它重写为python。我的最后一次尝试是:

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

nx, ny = .3, .3
x = np.arange(-3, 3, nx)
y = np.arange(-2, 2, ny)
X, Y = np.meshgrid(x, y)

dy = X + np.sin(Y)
dx = np.ones((10,10))

plot2 = plt.figure()
plt.quiver(X, Y, dx, dy, 
           color='Teal', 
           headlength=7)

plt.title('Quiver Plot, Single Colour')
plt.show(plot2)

但我收到错误:

builtins.ValueError: operands could not be broadcast together with shapes (100,) (280,) 

我虽然会很简单,但经过几个小时的搜索,如何绘制一个简单的方向场,我很郁闷。

2 个答案:

答案 0 :(得分:3)

您还可以使用字段的streamlines来给出流动的良好印象,并根据字段的某些属性(在本例中为dy)为曲线着色。请看以下示例:

nx, ny = .3, .3
x = np.arange(-3, 3, nx)
y = np.arange(-2, 2, ny)
X, Y = np.meshgrid(x, y)
dy = X + np.sin(Y)
dx = np.ones(dy.shape)

color = dy
lw = 1
plt.streamplot(X,Y,dx, dy, color=color, density=1., cmap='jet', arrowsize=1)

产生:

enter image description here

答案 1 :(得分:2)

dxdy的形状必须与XY相同。

目前,(14, 20)XY的形状为dy(10,10)的形状为dx

如果您将定义dx的行更改为:

dx = np.ones(dy.shape)

一切正常:

PUT Response