2017-02-20 32 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

私はちょうど青階と下のこぶなしに、3D面の上半分を取得しようとしています。私はそれらを透明したいと思います。

私はvminを適切に設定しようとしましたが、マスクされた配列を使用しても、私のプロットにはまだ色の「フロア」があります。

注:私の実際の状況は、いくつかのデータ、点のグリッド上で生成された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

関連する問題