A stream plot, or streamline plot, is used to display 2D vector fields. This example shows a few features of the streamplot function:

  • Varying the color along a streamline.

  • Varying the density of streamlines.

  • Varying the line width along a streamline.

  • Controlling the starting points of streamlines.

  • Streamlines skipping masked regions and NaN values.

  • Unbroken streamlines even when exceeding the limit of lines within a single grid cell.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

w = 3
Y, X = np.mgrid[-w:w:100j, -w:w:100j]
U = -1 - X**2 + Y
V = 1 + X - Y**2
speed = np.sqrt(U**2 + V**2)

fig = plt.figure(figsize=(7, 9))
gs = gridspec.GridSpec(nrows=3, ncols=2, height_ratios=[1, 1, 2])

#  Varying density along a streamline
ax0 = fig.add_subplot(gs[0, 0])
ax0.streamplot(X, Y, U, V, density=[0.5, 1])
ax0.set_title('Varying Density')

# Varying color along a streamline
ax1 = fig.add_subplot(gs[0, 1])
strm = ax1.streamplot(X, Y, U, V, color=U, linewidth=2, cmap='autumn')
ax1.set_title('Varying Color')

#  Varying line width along a streamline
ax2 = fig.add_subplot(gs[1, 0])
lw = 5*speed / speed.max()
ax2.streamplot(X, Y, U, V, density=0.6, color='k', linewidth=lw)
ax2.set_title('Varying Line Width')

# Controlling the starting points of the streamlines
seed_points = np.array([[-2, -1, 0, 1, 2, -1], [-2, -1,  0, 1, 2, 2]])

ax3 = fig.add_subplot(gs[1, 1])
strm = ax3.streamplot(X, Y, U, V, color=U, linewidth=2,
                      cmap='autumn', start_points=seed_points.T)
ax3.set_title('Controlling Starting Points')

# Displaying the starting points with blue symbols.
ax3.plot(seed_points[0], seed_points[1], 'bo')
ax3.set(xlim=(-w, w), ylim=(-w, w))

# Create a mask
mask = np.zeros(U.shape, dtype=bool)
mask[40:60, 40:60] = True
U[:20, :20] = np.nan
U =, mask=mask)

ax4 = fig.add_subplot(gs[2, 0])
ax4.streamplot(X, Y, U, V, color='r')
ax4.set_title('Streamplot with Masking')

ax4.imshow(~mask, extent=(-w, w, -w, w), alpha=0.5, cmap='gray', aspect='auto')

ax5 = fig.add_subplot(gs[2, 1])
ax5.streamplot(X, Y, U, V, broken_streamlines=False)
ax5.set_title('Streamplot with unbroken streamlines')

Varying Density, Varying Color, Varying Line Width, Controlling Starting Points, Streamplot with Masking, Streamplot with unbroken streamlines


The use of the following functions, methods, classes and modules is shown in this example:

Total running time of the script: ( 0 minutes 4.863 seconds)

Gallery generated by Sphinx-Gallery