【问题标题】:Plotting streamlines with Matplotlib - Python使用 Matplotlib 绘制流线 - Python
【发布时间】:2014-05-30 23:36:44
【问题描述】:

我正在尝试使用 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 尺寸相同,我不知道如何得到这些错误。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: python matplotlib flow


    【解决方案1】:

    pylab 示例使用Y,X,然后使用 numpy.mgrid 为流图绘制 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 轴。

    【讨论】:

    • 我想这与一个 x 中的列的值如何与另一个 y 中的行匹配有关,基本上是 x 和 y 轴关系。
    • 这有点奇怪,但我想它使用的是 numpy 方法来绘制它自己的一个。
    【解决方案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, y 或y, x 传递给streamplot。

    但是,(有点宽松?)二维数组似乎被接受,以防它们的形式为X, Y = numpy.meshgrid(x_1d, y_1d)。但不幸的是不是Y, X = numpy.meshgrid(x_1d, y_1d)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 2016-01-27
      • 2020-11-28
      相关资源
      最近更新 更多