2012-08-28 131 views
3

我想画一个3D地毯阴谋与Python Pylab或matplotlib。我解释我的意思是地毯情节:Python matplotlib/pylab - 一个3D地毯阴谋

我在X,Y meshgrid上有点。这些点附有一个海拔高度,但也是一个有限集合的整数。一个共同的三维图可以让人们减轻压力。仰角沿着Z轴,我们可以沿着Z轴对垂直坐标X,Y确定的点进行仰角测量。或者,我绘制海拔高度热图。这是一个二维图,每个像素由X确定,Y的颜色是高度的函数,红色表示顶点,蓝色表示底部。我对这些数据做了一些聚类,聚类之后,我对每个像素都有两个信息:高程和一个标签(整数)。我可以绘制每个带有标签的像素的2D地图,这给了我聚类结果。

现在,我想绘制在同一个3D图上的两个信息。 Z坐标应该是高程,并且表面上的点应该用其“簇颜色”着色。这就是我所说的3D地毯情节(如果术语听起来不正确,请告诉我)。

回答

2

您的“聚类颜色”是网格的X,Y,Z值的一些条件。如果您可以制作这些掩码(值为True/False),则可以很简单地将颜色映射到它们上面。我给出了一组任意条件的例子,您可以根据自己的需求进行调整。代码改编自http://matplotlib.sourceforge.net/mpl_toolkits/mplot3d/tutorial.html

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

# Some sample data 
x_side = np.arange(-5, 5, 0.04) 
y_side = np.arange(-5, 5, 0.04) 
X, Y = np.meshgrid(x_side,y_side) 

# Fake mountains 
Z = np.exp(-(X**2+Y**2)) + 2*np.exp(-((X-2)**2+Y**2)) 

# Assign colors based off some user-defined condition 
COLORS = np.empty(X.shape, dtype=str) 
COLORS[:,:] = 'b' 
COLORS[(Z>.1) * (Z<.3)] = 'r' 
COLORS[Z>.3] = 'g' 
COLORS[X+Y < -1] = 'k' 

# 3D surface plot 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
surf = ax.plot_surface(X, Y, Z, facecolors=COLORS, rstride=1, cstride=1, 
     linewidth=0) 
plt.show() 

enter image description here

+0

非常感谢,这是有益的 – octoback