# 5. 3D Plotting¶

Use the “v2” files in older versions of IPython, e.g. 0.12

# Matplotlib Tutorial: 5. 3D plotting

The 3D plotting toolkit introduced in matplotlib version 1.0 can lead to some very nice plots. We'll explore a few of the options here: for more examples, the matplotlib tutorial is a great resource.

Again we'll use inline plotting, though it can be useful to skip the "inline" backend to allow interactive manipulation of the plots.

In [1]:
%pylab inline

Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].
For more information, type 'help(pylab)'.

In [2]:
# This is the 3D plotting toolkit
from mpl_toolkits.mplot3d import Axes3D


Just as before when we created a 2D axes and called several plotting methods on it, here we'll create some 3D axes objects and call 3D plotting routines. Below are several examples.

## 3D scatter Plot

The 3D scatter plot takes all the same keyword parameters as the 2D scatter plot, so its use should be familiar. To create a 3D axes, we need to pass the argument projection='3d'.

In [3]:
fig = plt.figure()
ax = plt.axes(projection='3d')

z = np.linspace(0, 1, 100)
x = z * np.sin(20 * z)
y = z * np.cos(20 * z)

c = x + y

ax.scatter(x, y, z, c=c)

Out [3]:
<mpl_toolkits.mplot3d.art3d.Patch3DCollection at 0x9bce74c>

## 3D Line Plot

Like the 2D and 3D scatter command, the 2D and 3D plot command have the same argument structure. Thus plotting a 3D line plot is straightforward:

In [4]:
fig = plt.figure()
ax = plt.axes(projection='3d')

ax.plot(x, y, z, '-b')

Out [4]:
[<mpl_toolkits.mplot3d.art3d.Line3D at 0x9b7daac>]

## Surface Plot

Surface plots are connected plots of x, y, and z coordinates. They can be used to make some pretty interesting shapes:

In [5]:
x = np.outer(np.linspace(-2, 2, 30), np.ones(30))
y = x.copy().T
z = np.cos(x ** 2 + y ** 2)

fig = plt.figure()
ax = plt.axes(projection='3d')

ax.plot_surface(x, y, z, cmap=plt.cm.jet, rstride=1, cstride=1, linewidth=0)

Out [5]:
<mpl_toolkits.mplot3d.art3d.Poly3DCollection at 0x9f4570c>

## Wire-frame plot

Wire-frame plots draw lines between nearby points. They can be displayed using the plot_wireframe method. Here we'll plot a parametrized sphere:

In [6]:
u = np.linspace(0, np.pi, 30)
v = np.linspace(0, 2 * np.pi, 30)

x = np.outer(np.sin(u), np.sin(v))
y = np.outer(np.sin(u), np.cos(v))
z = np.outer(np.cos(u), np.ones_like(v))

fig = plt.figure()
ax = plt.axes(projection='3d')

ax.plot_wireframe(x, y, z)

Out [6]:
<mpl_toolkits.mplot3d.art3d.Line3DCollection at 0x9f2162c>