如果你有一个Z的表达式
如果有Z的表达式,则可以生成网格,并调用surface_plot:#!/usr/bin/python3
import sys
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import numpy
from numpy.random import randn, shuffle
from scipy import linspace, meshgrid, arange, empty, concatenate, newaxis, shape
# =========================
## generating ordered data:
N = 32
x = sorted(randn(N))
y = sorted(randn(N))
X, Y = meshgrid(x, y)
Z = X**2 + Y**2
# ======================================
## reference picture (X, Y and Z in 2D):
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)
title = ax.set_title("plot_surface: given X, Y and Z as 2D:")
title.set_y(1.01)
ax.xaxis.set_major_locator(MaxNLocator(5))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.zaxis.set_major_locator(MaxNLocator(5))
fig.tight_layout()
fig.savefig('3D-constructing-{}.png'.format(N))
结果:
如果没有Z的表达式
上面只使用了surface_plot函数accepts X, Y and Z as 2D arrays。如果没有Z的表达式,而只是在列表列表中存储了一个数据,则这是不可能的:[[x1, y1, z1],[x2,y2,z2],...]。在这种情况下,您可以使用plot_trisurf。在
在下面的代码中,我构造了X、Y和Z的2D,然后重新格式化数据,使其在1D中具有X、Y和Z,然后使用plot_trisurf绘制相同的数据:
^{pr2}$
结果: