2014-09-10 30 views

回答

1

如果如果您有Z您可以生成网状的表达,并呼吁surface_plot您有一个对应Z

的expresson:

#!/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)) 

结果:

enter image description here

如果您没有Z

的表达式10

surface_plot以上功能仅用于accepts X, Y and Z as 2D arrays。如果没有Z表达式,那么这是不可能的 - 但只是将数据存储在列表列表中:[[x1, y1, z1],[x2,y2,z2],...]。在这种情况下,您可以使用plot_trisurf

在下面我构造X,Y和Z中的2D码,然后重新塑造数据具有X,Y和Z在图1D中,将它洗,并用plot_trisurf绘制相同的数据:

#!/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 = 128 
x = sorted(randn(N)) 
y = sorted(randn(N)) 

X, Y = meshgrid(x, y) 
Z = X**2 + Y**2 


# ======================= 
## re-shaping data in 1D: 

# flat and prepare for concat: 
X_flat = X.flatten()[:, newaxis] 
Y_flat = Y.flatten()[:, newaxis] 
Z_flat = Z.flatten()[:, newaxis] 

DATA = concatenate((X_flat, Y_flat, Z_flat), axis=1) 

shuffle(DATA) 

Xs = DATA[:,0] 
Ys = DATA[:,1] 
Zs = DATA[:,2] 


# ==================================================== 
## plotting surface using X, Y and Z given as 1D data: 

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

surf = ax.plot_trisurf(Xs, Ys, Zs, cmap=cm.jet, linewidth=0) 
fig.colorbar(surf) 

title = ax.set_title("plot_trisurf: takes X, Y and Z as 1D") 
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-reconstructing-{}.png'.format(N)) 

结果:

enter image description here

相关问题