使用Matplotlib-Python绘制流线

2024-04-25 17:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图用Matplotlib绘制一些流线。

到目前为止,我有这段代码,作为绘制向量场的示例:

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

我不知道如何使用“标准”顺序,因为我的网格是平方的。此外,如果我的xy维度相同,我不知道如何得到这些错误。

任何帮助都将不胜感激。

谢谢你。


Tags: inpynumpyfieldmatplotliblibpackagesline
2条回答

根据streamplotdocumentation

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, yy, xstreamplot

不过,(有点宽大?)如果二维数组的形式是X, Y = numpy.meshgrid(x_1d, y_1d),则似乎可以接受它们。但不幸的是没有Y, X = numpy.meshgrid(x_1d, y_1d)

pylab示例使用Y,X,然后使用numpy.mgrid为streamplots绘制X,Y。

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轴。

相关问题 更多 >