Python matplotlib/pylab-三维地毯图

Python matplotlib/pylab-三维地毯图,python,3d,plot,matplotlib,Python,3d,Plot,Matplotlib,我想用Python Pylab或matplotlib绘制一个3D地毯图。我用地毯式情节来解释我的意思: 我在X,Y网格上有点。这些点附着有高程,但也包含有限集中的整数。一个普通的3D绘图可以使浮雕形象化。高程沿Z轴,我们可以将由坐标X、Y沿Z轴确定的点的高程可视化。或者,我为海拔绘制热图。这是一个二维图,每个像素由X,Y决定,颜色是高度的函数,红色代表顶点,蓝色代表底部。我对这些数据进行了一些聚类,聚类后,对于每个像素,我有两个信息:高程和一个标签整数。我可以画一个2D地图,每个像素都用它的标签

我想用Python Pylab或matplotlib绘制一个3D地毯图。我用地毯式情节来解释我的意思:

我在X,Y网格上有点。这些点附着有高程,但也包含有限集中的整数。一个普通的3D绘图可以使浮雕形象化。高程沿Z轴,我们可以将由坐标X、Y沿Z轴确定的点的高程可视化。或者,我为海拔绘制热图。这是一个二维图,每个像素由X,Y决定,颜色是高度的函数,红色代表顶点,蓝色代表底部。我对这些数据进行了一些聚类,聚类后,对于每个像素,我有两个信息:高程和一个标签整数。我可以画一个2D地图,每个像素都用它的标签上色,这给了我聚类结果


现在,我想在同一个3D图形上绘制这两个信息。Z坐标应为高程,曲面上的点应使用其簇颜色进行着色。这就是我所说的3D地毯图,如果术语听起来不正确,请告诉我。

簇颜色是网格X、Y、Z值上的一组条件。如果可以将这些设置为真/假值的遮罩,则很容易将颜色映射到它们上。我给出了一个任意条件集的示例,您可以根据自己的需要进行调整。代码改编自:

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()