2013-03-20 112 views
11

我正在使用scatter和mplot3d函數繪製3D散點圖。我爲繪圖中的所有點選擇單一顏色,但當通過matplotlib繪製時,點的透明度將相對於距相機的距離設置。有什麼辦法可以禁用這個功能嗎?使用Python和matplotlib控制3D散點圖上的alpha值

我已經嘗試將alpha kwarg設置爲None/1,並將vmin/vmax設置爲1(試圖強制顏色縮放爲單色),但沒有運氣。在分散文檔中我沒有看到與此設置相關的任何其他可能的選項。

謝謝!

回答

11

沒有任何參數可以控制這個。這裏有一些破解方法。

禁用set_edgecolorsset_facecolors方法,使mplot3d無法更新顏色的alpha部分:如果你想set_edgecolorsset_facecolors方法再打

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

,你可以備份這些兩種方法禁用它們之前:

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

這完美的作品。謝謝! – coderunner 2013-03-21 15:16:30

+0

如果有編程解決方案可以稱爲「厚臉皮」.. :) – BenB 2016-11-21 01:31:16

6

如果你只wa nt來禁用阿爾法調整,您可以覆蓋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版本) – 2017-02-27 10:20:50