2013-03-20 107 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