Раздел «Язык Си».PythonGraphs3D:

3D графики

3D axes можно получить разными способами.

from mpl_toolkits.mplot3d import axes3d
ax = axes3d.Axes3D(plt.figure())

Или в add_subplot задать projection='3d'

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

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

axes из Axes3D

from mpl_toolkits.mplot3d import axes3d
ax = axes3d.Axes3D(plt.figure())

Полный код

import matplotlib.pyplot as plt
import numpy as np

from mpl_toolkits.mplot3d import axes3d
ax = axes3d.Axes3D(plt.figure())

i = np.arange(-1, 1, 0.01)
X, Y = np.meshgrid(i, i)
Z = X**2 - Y**2

ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)

plt.show()

projection='3d'

В примере показаны разные типы 3D графиков: заливка (surface), каркас (wireframe) и проекции (contour)

from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

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

R = np.sqrt(X**2 + Y**2)
Z = np.sin(4 * R) / R

fig, ax = plt.subplots(1, 3, figsize=(14, 4), subplot_kw=dict(projection='3d'))

# subplot0 - surface

norm = mpl.colors.Normalize(-abs(Z).max(), abs(Z).max())

p = ax[0].plot_surface(X, Y, Z, rstride=1, cstride=1, linewidth=0,
antialiased=False, norm=norm, cmap=mpl.cm.Blues)
cb = fig.colorbar(p, ax=ax[0], shrink=0.6)

ax[0].set_xlabel("$x$", fontsize=16)
ax[0].set_ylabel("$y$", fontsize=16)
ax[0].set_zlabel("$z$", fontsize=16)

# subplot1 - wireframe

ax[1].plot_wireframe(X, Y, Z, rstride=2, cstride=2, color="darkgrey")
ax[1].set_title("plot_wireframe")
# no ticks
ax[1].set_xticks([])
ax[1].set_yticks([])
ax[1].set_zticks([])

# subplot2
ax[2].contour(X, Y, Z, zdir='z', offset=0, norm=norm, cmap=mpl.cm.Blues)
ax[2].contour(X, Y, Z, zdir='y', offset=3, norm=norm, cmap=mpl.cm.Blues)
ax[2].set_title("contour")
ax[2].set_xlabel("$x$", fontsize=16)
ax[2].set_ylabel("$y$", fontsize=16)
ax[2].set_zlabel("$z$", fontsize=16)

plt.show()
fig.savefig("5b0.png", dpi=100)  # results in 4*160x4*120 px image

Задаем функцию Z(X,Y) в отдельной функции, заливка

from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import LinearSegmentedColormap
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np

# отдельная функция, в которой задаются x, y, z
def makeData():
        x = np.arange(-10, 10, 0.1)
        y = np.arange(-10, 10, 0.1)
        xgrid, ygrid = np.meshgrid(x, y)
        zgrid = np.sin(xgrid)*np.sin(ygrid)/(xgrid*ygrid)
        return xgrid, ygrid, zgrid

# вызов этой функции и дальше рисуем 3D график
x, y, z = makeData()

fig = plt.figure()
ax = Axes3D(fig)

ax.plot_surface(x, y, z, rstride=4, cstride=4, cmap=cm.jet)

plt.show()
fig.savefig('5c.png')