我想用Python Pylab或matplotlib绘制 3D 地毯图。我解释了地毯情节的意思:
我在X,Y网格上有点。这些点附有一个高程,但也是一个有限集的整数。一个常见的3D图可以使浮雕成为可能。高程沿着Z,我们可以对由其坐标X,Y沿Z轴确定的点的高程进行可视化。或者,我绘制热图以进行提升。它是2D图,每个像素由X,Y确定,颜色是高度的函数,红色是顶点,蓝色是底部。我对这些数据进行了一些聚类,在聚类之后,对于每个像素,我有两个信息:高程和标签(整数)。我可以绘制一个2D地图,每个像素都用其标签着色,这样就可以得到聚类结果。
现在,我想在同一个3D图上绘制两个信息。 Z坐标应为高程,表面上的点应以其“簇颜色”着色。这就是我所说的3D地毯图(如果术语听起来不正确,请告诉我)。
答案 0 :(得分:3)
您的“群集颜色”是网格的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()