2013-03-20 15 views
11

scatterとmplot3d関数を使用して3D散布図をプロットしています。私はプロット内のすべての点について単一の色を選択していますが、matplotlibによって描画された場合、点の透明度はカメラからの距離に対して相対的に設定されます。この機能を無効にする方法はありますか?Pythonとmatplotlibを使用した3D散布図のアルファ値の制御

アルファkwargをNone/1に設定し、vmin/vmaxを1に設定してみました(色のスケーリングを強制的に単色にするため)。この設定に関連するその他の可能性のあるオプションは、スキャッタドキュメントには表示されませんでした。

ありがとうございます!

答えて

11

これを制御できる引数はありません。ここにいくつかのハック方法があります。

無効にset_edgecolorsset_facecolors方法、mplot3dは色のアルファ部分を更新できないように:

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

fig = plt.figure() 
ax = fig.gca(projection='3d') 

x = np.random.sample(20) 
y = np.random.sample(20) 
z = np.random.sample(20) 
s = ax.scatter(x, y, z, c="r") 
s.set_edgecolors = s.set_facecolors = lambda *args:None 

ax.legend() 
ax.set_xlim3d(0, 1) 
ax.set_ylim3d(0, 1) 
ax.set_zlim3d(0, 1) 

plt.show() 

enter image description here

あなたはset_edgecolorsset_facecolors方法後で呼び出したい場合は、バックアップにこれらをすることができます2つの方法を無効にする前に:

s._set_facecolors, s._set_edgecolors = s.set_facecolors, s.set_edgecolors 
+0

これは完璧に動作します。ありがとう! – coderunner

+0

"cheeky"と呼べるプログラミングソリューションがあれば: – BenB

6

アルファ調整を無効にするには、zalpha関数を上書きすることができます。これにより、インタラクティブなプロットの場合に色を更新し、深度フォグを削除することができます。

from mpl_toolkits.mplot3d import * 
import numpy as np 
import matplotlib.pyplot as plt 
plt.ion() 

art3d.zalpha = lambda *args:args[0] 

fig = plt.figure() 
ax = fig.gca(projection='3d') 

x = np.random.sample(20) 
y = np.random.sample(20) 
z = np.random.sample(20) 
s = ax.scatter(x, y, z, c="r") 

ax.legend() 
ax.set_xlim3d(0, 1) 
ax.set_ylim3d(0, 1) 
ax.set_zlim3d(0, 1) 

plt.show() 
4
ax.scatter(x, y, z, depthshade=0) 
+2

これは正解です(最近のmatplotlibのバージョンの場合) –

関連する問題