我正在使用scatter和mplot3d函数绘制3D散点图。我为绘图中的所有点选择单一颜色,但当通过matplotlib绘制时,点的透明度将相对于距相机的距离设置。有什么办法可以禁用这个功能吗?使用Python和matplotlib控制3D散点图上的alpha值
我已经尝试将alpha kwarg设置为None/1,并将vmin/vmax设置为1(试图强制颜色缩放为单色),但没有运气。在分散文档中我没有看到与此设置相关的任何其他可能的选项。
谢谢!
我正在使用scatter和mplot3d函数绘制3D散点图。我为绘图中的所有点选择单一颜色,但当通过matplotlib绘制时,点的透明度将相对于距相机的距离设置。有什么办法可以禁用这个功能吗?使用Python和matplotlib控制3D散点图上的alpha值
我已经尝试将alpha kwarg设置为None/1,并将vmin/vmax设置为1(试图强制颜色缩放为单色),但没有运气。在分散文档中我没有看到与此设置相关的任何其他可能的选项。
谢谢!
没有任何参数可以控制这个。这里有一些破解方法。
禁用set_edgecolors
和set_facecolors
方法,使mplot3d无法更新颜色的alpha部分:如果你想set_edgecolors
和set_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()
,你可以备份这些两种方法禁用它们之前:
s._set_facecolors, s._set_edgecolors = s.set_facecolors, s.set_edgecolors
如果你只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()
ax.scatter(x, y, z, depthshade=0)
这是正确的答案(对于最近的matplotlib版本) – 2017-02-27 10:20:50
这完美的作品。谢谢! – coderunner 2013-03-21 15:16:30
如果有编程解决方案可以称为“厚脸皮”.. :) – BenB 2016-11-21 01:31:16