Matplotlib Tutorial

Matplotlib - 3D Surface Plot



A three-dimensional axes can be created by passing projection='3d' keyword to the axes creation routine. After creating 3D axes, matplotlib.Axes3D.plot_surface() function creates a surface plot. By default it will be colored in shades of a solid color, but it also supports color mapping by supplying the cmap argument.

Syntax

matplotlib.Axes3D.plot_surface(X, Y, Z, rcount, ccount, 
                               rstride, cstride, cmap)

Parameters

X, Y, Z Required. Specify Data values.
rcount, ccount Optional. Specify maximum number of samples used in each direction. If the input data is larger, it will be downsampled (by slicing) to these numbers of points. Defaults to 50.
rstride, cstride Optional. Specify downsampling stride in each direction. These arguments are mutually exclusive with rcount and ccount. If only one of rstride or cstride is set, the other defaults to 10.
cmap Optional. Specify a colormap for the surface patches.

Example: 3D surface plot of test data

In the example below, surface plot is drawn for the test data present within the package.

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_title('Surface Plot')

#getting test data
X, Y, Z = axes3d.get_test_data(0.05)

#drawing surface plot
cb = ax.plot_surface(X, Y, Z, color="green")

plt.show()

The output of the above code will be:

3D Surface Plot

Example: 3D surface plot

Lets consider one more example. Here, the surface plot is drawn from user-defined 3D plane.

import matplotlib.pyplot as plt
import numpy as np

def f(x, y):
  return np.sin(np.sqrt(x ** 2 + y ** 2))

xlist = np.linspace(-6.0, 6.0, 100)
ylist = ylist = np.linspace(-6.0, 6.0, 100)
X, Y = np.meshgrid(xlist, ylist)

#creating 3D plane
Z = f(X, Y)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_title('Surface Plot')

#drawing surface plot
cb = ax.plot_surface(X, Y, Z)

plt.show()

The output of the above code will be:

3D Surface Plot