Summary:
Assume that
import matplotlib.pyplot as plt
has been executed.
When using mplot3d
in IPython you have to manually draw the axes
which can be done using the plt.draw
function (or plt.plot([],[])
).
For some reason the axes are not automatically drawn as with 2d plots.
The full story:
IPython provides some nice functionality for interactive plotting. For instance, the code
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y)
pops up a figure with the graph of the sin
function over the interval $[0,2\pi]$.
When using mplot3d
for 3d plots in IPython the constructed axes are
not drawn by default. For instance the code (taken from the mplot3d
examples)
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
def randrange(n, vmin, vmax):
return (vmax-vmin)*np.random.rand(n) + vmin
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
n = 100
for c, m, zl, zh in [('r', 'o', -50, -25), ('b', '^', -30, -5)]:
xs = randrange(n, 23, 32)
ys = randrange(n, 0, 100)
zs = randrange(n, zl, zh)
ax.scatter(xs, ys, zs, c=c, marker=m)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
results in a blank figure on the screen. In order to see the results one
must manually draw the axes which can be done with the plt.draw
function
(or with plt.plot([],[])
). I have no idea why this is the case, but
hopefully it will be fixed at some point.