2017-02-20 111 views
0

我正在嘗試從3D曲面圖中「移除地板」。例如,在這個matplotlib演示代碼:從3D曲面圖中移除地板

from mpl_toolkits.mplot3d import axes3d 
import matplotlib.pyplot as plt 
from matplotlib import cm 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
X, Y, Z = axes3d.get_test_data(0.05) 
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3) 
cset = ax.contour(X, Y, Z, zdir='z', offset=-100, cmap=cm.coolwarm) 
cset = ax.contour(X, Y, Z, zdir='x', offset=-40, cmap=cm.coolwarm) 
cset = ax.contour(X, Y, Z, zdir='y', offset=40, cmap=cm.coolwarm) 

ax.set_xlabel('X') 
ax.set_xlim(-40, 40) 
ax.set_ylabel('Y') 
ax.set_ylim(-40, 40) 
ax.set_zlabel('Z') 
ax.set_zlim(-100, 100) 

enter image description here

我想剛剛得到的三維表面的上半部分,而藍色地板,底部駝背。我想他們透明

我試過適當地設置vmin,即使使用了蒙版數組,但我仍然在我的地塊中獲得了「底色」。

注意:我的real情況是繪製一些數據上生成的KDE,點在一個網格上,我不希望整個底圖都是相同的藍色。

+0

什麼是 「適當設置VMIN」 是什麼意思?我認爲應該可以將不需要的值設置爲透明顏色。 – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest怎麼樣? – user79950

回答

1

這個想法可以將不需要的部分設置爲透明顏色,使用顏色映射的規範化。

from mpl_toolkits.mplot3d import axes3d 
import matplotlib.pyplot as plt 
from matplotlib import cm 
import matplotlib.colors 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
X, Y, Z = axes3d.get_test_data(0.05) 

norm = matplotlib.colors.Normalize(0,100) 
cmap = cm.coolwarm 
cmap.set_under((0,0,0,0), alpha=0.0) 
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, norm=norm, cmap=cmap) 

ax.set_xlabel('X') 
ax.set_xlim(-40, 40) 
ax.set_ylabel('Y') 
ax.set_ylim(-40, 40) 
ax.set_zlabel('Z') 
ax.set_zlim(-100, 100) 

plt.show() 

enter image description here