2013-05-01 2 views
5

문제를 바하기 matplotlib - 3D에 대한 잘못된 법선 플롯


하기 matplotlib를 사용하여 좀 바 얼굴에 잘못된 법선 값을 가지고 차트에 3 차원 막대를 세우고. 이 enter image description here

일부 바의 어떤면이 잘못된 것을 참조 : 나는 240 바 고밀도 빈 그래프를 플롯하면



는,이 결과를 얻을 수 ? 바 Z 순서도 잘못되었습니다.


대한 정보


내가하기 matplotlib와 NumPy와의 최신 안정 버전을 사용하고 있습니다. 내 파이썬 버전이 2.7.3


LOGS


이 내가 콘솔에서 얻을 경고 만입니다 :

RuntimeWarning : 대한 분할 에서 발생하는 잘못된 값 정규직에서 n])


도움을 주시면 감사하겠습니다. 영역 적색 점으로 표시 응답에 제시된 샘플 (참조하여, enter image description here

또는 :


EDIT @Saullo 카스트로 대답

, 이렇게 생성 된 새로운 그래프이다) :

enter image description here

왼쪽의 문제는 상단의 바면이지만 이미 꽤 좋습니다. 누구든지 이에 대한 의견이 있으면 저를 도울 수 있습니다.당신이 ax.bar3d()를 호출 할 때 매개 변수 zsort='max'를 사용

답변

4

문제 (here 참조) 해결 :

나는 당신의 문제를 재생 this other question에서 코드의 수정 된 버전을 사용
ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b', alpha=1., zsort='max') 

:

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

data = np.array([[0,1,0,2,0], 
       [0,3,0,2,0], 
       [6,1,1,7,0], 
       [0,5,0,2,9], 
       [0,1,0,4,0], 
       [9,1,3,4,2], 
       [0,0,2,1,3], ]) 

column_names = ['a','b','c','d','e'] 
row_names = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'] 

fig = plt.figure() 
ax = Axes3D(fig) 

lx= len(data[0])   # Work out matrix dimensions 
ly= len(data[:,0]) 
xpos = np.arange(0,lx,1) # Set up a mesh of positions 
ypos = np.arange(0,ly,1) 
xpos, ypos = np.meshgrid(xpos+0.5, ypos+0.5) 

xpos = xpos.flatten() # Convert positions to 1D array 
ypos = ypos.flatten() 
zpos = np.ones(lx*ly)*1e-10 

dx = 1. * np.ones_like(zpos) 
dy = dx.copy() 
dz = data.flatten() 

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b', alpha=1., zsort='max') 
plt.ion() 
plt.show() 
+0

감사합니다 , @SaulloCastro이 수정은 거의 완벽한 것입니다. 막대의 윗면을 제외하고는 이제 Z 순서가 정상입니다. 나는 새로운 이미지를 게시 할 것이다. –

+0

듣기 좋습니다! 포스트와 우리는 그것을 볼 수 있습니다 ... –

+0

그것은 이미 있습니다. 의견이 있으시면 언제든지 편집 해주십시오. 감사! –