Skip to content Skip to sidebar Skip to footer

Plotting Streamlines With Matplotlib - Python

I'm trying to plot some streamlines with Matplotlib. I have this code so far, as an example to plot a 10 x 10 vector field: def plot_streamlines(file_path, vector_field_x, vector_f

Solution 1:

The pylab examples use Y,X then plot X,Y for streamplots using numpy.mgrid.

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()

Taken from 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.        ]]

There seems a direct relation with how the data looks in regard to x and y axis, the -2,2 etc.. resembling an x-axis and y values resembling a y-axis.

Solution 2:

According to streamplotdocumentation:

x, y : 1d arrays
    an evenly spaced grid.

In your case a verbose equivalent to Y, X = np.mgrid[-3:3:100j, -3:3:100j] is:

x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)

and you can safely pass x, y or y, x to streamplot.

However, (a bit lenient ?) 2-d arrays seem to be accepted in case they are of the form X, Y = numpy.meshgrid(x_1d, y_1d). But unfortunately not Y, X = numpy.meshgrid(x_1d, y_1d).

Post a Comment for "Plotting Streamlines With Matplotlib - Python"