我正试图用Matplotlib绘制一些流线。
到目前为止,我有这个代码,作为绘制 10 x 10 矢量字段的示例:
def plot_streamlines(file_path, vector_field_x, vector_field_y):
plt.figure()
y, x = numpy.mgrid[-2:2:10j, -2:2:10j]
plt.streamplot(x, y, vector_field_x, vector_field_y, color='y', cmap=plt.cm.autumn)
plt.savefig(file_path + '.png')
plt.close()
这样可以正常使用,但如果我改变这一行:
y, x = numpy.mgrid[-2:2:10j, -2:2:10j]
那个:
x, y = numpy.mgrid[-2:2:10j, -2:2:10j]
我收到了一些错误:
Traceback (most recent call last):
File "Library/Python/2.7/lib/python/site-packages/matplotlib/pyplot.py", line 3224, in streamplot minlength=minlength, transform=transform)
File "/Library/Python/2.7/lib/python/site-packages/matplotlib/axes.py", line 6861, in streamplot transform=transform)
File "Library/Python/2.7/lib/python/site-packages/matplotlib/streamplot.py", line 67, in streamplot grid = Grid(x, y)
File "Library/Python/2.7/lib/python/site-packages/matplotlib/streamplot.py", line 256, in __init__
assert np.allclose(x_row, x)
AssertionError
我不明白我如何使用“标准”顺序 x / y ,因为我的网格是平方的。此外,如果我的 x 和 y 尺寸相同,我不知道如何获得这些错误。
任何帮助都将不胜感激。
谢谢。
答案 0 :(得分:2)
pylab示例使用Y,X
然后使用numpy.mgrid将X,Y绘制为streamplots。
import numpy as np
import matplotlib.pyplot as plt
Y, X = np.mgrid[-3:3:100j, -3:3:100j]
U = -1 - X**2 + Y
V = 1 + X - Y**2
speed = np.sqrt(U*U + V*V)
plt.streamplot(X, Y, U, V, color=U, linewidth=2, cmap=plt.cm.autumn)
plt.colorbar()
f, (ax1, ax2) = plt.subplots(ncols=2)
ax1.streamplot(X, Y, U, V, density=[0.5, 1]
lw = 5*speed/speed.max()
ax2.streamplot(X, Y, U, V, density=0.6, color='k', linewidth=lw)
plt.show()
取自here。
y,x = numpy.mgrid[-2:2:4j,-2:2:4j]
x = [[-2. -0.66666667 0.66666667 2. ]
[-2. -0.66666667 0.66666667 2. ]
[-2. -0.66666667 0.66666667 2. ]
[-2. -0.66666667 0.66666667 2. ]]
y = [[-2. -2. -2. -2. ]
[-0.66666667 -0.66666667 -0.66666667 -0.66666667]
[ 0.66666667 0.66666667 0.66666667 0.66666667]
[ 2. 2. 2. 2. ]]
似乎与数据在x和y轴方面看起来有直接关系,-2,2等...类似于x轴,y值类似于y轴。
答案 1 :(得分:0)
根据streamplot
documentation:
x, y : 1d arrays
an evenly spaced grid.
在您的情况下,等同于Y, X = np.mgrid[-3:3:100j, -3:3:100j]
的详细信息为:
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
您可以安全地将x, y
或y, x
传递给streamplot
。
然而,(有点宽容?)2-d数组似乎被接受,如果它们是X, Y = numpy.meshgrid(x_1d, y_1d)
形式。但不幸的是Y, X = numpy.meshgrid(x_1d, y_1d)
。