The solution will depend on how the data is organized.
Data on regular grid
If the X
and Y
data already define a grid, they can be easily reshaped to a quadrilateral grid. E.g.
#x y z
4 1 3
6 1 8
8 1 -9
4 2 10
6 2 -1
8 2 -8
4 3 8
6 3 -9
8 3 0
4 4 -1
6 4 -8
8 4 8
can plotted as a plot_surface
using
ax = fig.gca(projection='3d')
ax.plot_surface(X.reshape(4,3), Y.reshape(4,3), Z.reshape(4,3))
Arbitrary data
(a) In case the data is not living on a quadrilateral grid, one can interpolate the data on a grid. One method to do so is provided by matplotlib itself, using matplotlib.mlab.griddata
.
import matplotlib.mlab
xi = np.linspace(4, 8, num=10)
yi = np.linspace(1, 4, num=10)
zi = matplotlib.mlab.griddata(X, Y, Z, xi, yi, interp='linear')
ax.plot_surface(xi, yi, zi)
(b) Finally, one can plot a surface completely without the use of a quadrilateral grid. This can be done using plot_trisurf
.
plt.plot_trisurf(X,Y,Z)
This answer is an adapted version of my answer for contour plots.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…