2012-08-28 3 views
3

3D 카펫 플롯을 Python Pylab 또는 matplotlib와 함께 그려 보겠습니다. 나는 카펫 계획을 가지고 무엇을 의미하는지 설명합니다 :Python matplotlib/pylab - 3D 카펫 플롯

나는 X, Y meshgrid에 점을 가지고 있습니다. 이 점에는 높이가 첨부되어 있지만 유한 집합의 정수도 있습니다. 일반적인 3D 플롯은 구제를 가능하게합니다. 고도는 Z를 따라 Z 축의 좌표 X, Y로 결정된 점에 대해 고도를 구상 할 수 있습니다. 또는 높이에 대한 히트 맵을 그립니다. 그것은 2D 플롯이며 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