2013-05-01 81 views
5

問題Matplotlib - 三維錯誤法線酒吧情節


當使用matplotlib和圖表我的一些酒吧的面孔得到了錯誤的法線值上繪製3D吧。



當我繪製高濃度區間圖,以240杆,我得到這樣的結果: enter image description here

見,某些酒吧一些面孔是錯誤的?酒吧Z順序也錯了。


關於


我使用Matplotlib和numpy的最新穩定版本。我的Python版本是2.7.3


日誌


這是唯一的警告,我從控制檯中看到:

RuntimeWarning:在鴻溝 遇到無效值n in normals])


任何幫助,非常感謝。


編輯

隨着@Saullo卡斯特羅答案,這是生產的新圖: enter image description here

或者,使用在回答提出的樣本(區域標有紅點):

enter image description here

的唯一剩下的問題就是頂部的酒吧面,但已經很不錯了。如果有人對此有任何評論,隨時可以幫助我。

回答

4

使用參數zsort='max'當你調用ax.bar3d()解決您的問題(見here):

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

我使用this other question代碼的修改後的版本與您的問題發揮:

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順序是正常的,除了酒吧的頂面。我將發佈所生成的新圖像。 – 2013-05-01 17:22:19

+0

很高興聽到!郵政,我們可以看看它... – 2013-05-01 17:24:08

+0

它已經在那裏。如果您有任何意見,請隨時編輯。謝謝! – 2013-05-01 17:33:40