2013-01-16 140 views
0

我有3D數據,即data.shape=(N,N,N)。我打算做的是繪製3D數據,使用不同的顏色來反映data[x,y,z]的值。如果某個值低於某個閾值,我希望這個點完全不可見(alpha=0)。所以從這個意義上說,我正在尋找一個「3D輪廓圖」。Matplotlib:繪製帶有alpha的3d數據

這甚至可能與matplotlib?

感謝您的任何建議。

我在使用ListContourPlot3D找到了mathematica的解決方案。如果有matplotlib的等價物,請讓我知道,謝謝

+0

也看看'這是建立在VTK並具有花式褲3D工具的所有方式mayavi'。 http://code.enthought.com/projects/mayavi/ – tacaswell

回答

1

它當然可能,請參閱下面的示例,其中3個nxm網格相互疊加。請注意,中間的數據已經在特定閾值以上屏蔽了數據(在這種情況下)。 alpha可以通過使用colormap的cmap.set_bad()屬性來控制。

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

fig = plt.figure() 

ax = fig.add_subplot(111, projection='3d') 
fig.text(.5,.9, 'Fancy plot', ha='center', size=14) 

ax.set_xticklabels([]) 
ax.set_yticklabels([]) 
ax.set_zticklabels([]) 

cmap=plt.cm.RdYlGn 
cmap.set_bad('white', alpha=0) 

p = ax.pcolor(x, y, ndvi1data, cmap=cmap) 
art3d.poly_collection_2d_to_3d(p, 0) 

q = ax.pcolor(x, y, np.ma.masked_where(ndvi2data>100,ndvi2data), cmap=cmap) 
art3d.poly_collection_2d_to_3d(q, 5) 

o = ax.pcolor(x, y, ndvi3data, cmap=cmap) 
art3d.poly_collection_2d_to_3d(o, 10) 

ax.set_xlim([x[0,0], x[-1,0]]) 
ax.set_ylim([y[0,0], y[0,-1]]) 
ax.set_zlim([0,10]) 

fig.colorbar(p) 

enter image description here

相關問題