我正在使用scatter和mplot3d函数绘制一个三维散点图。 我选择了一个颜色用于绘制所有点,但是当通过matplotlib绘制时,点的透明度相对于其与相机之间的距离而定。有没有办法禁用这个功能?
我已经尝试将alpha kwarg设置为None/1,还将vmin / vmax设置为1(试图强制颜色缩放为单一颜色),但没有成功。 我在scatter文档中没有看到任何其他可能与此设置相关的选项。
谢谢!
我正在使用scatter和mplot3d函数绘制一个三维散点图。 我选择了一个颜色用于绘制所有点,但是当通过matplotlib绘制时,点的透明度相对于其与相机之间的距离而定。有没有办法禁用这个功能?
我已经尝试将alpha kwarg设置为None/1,还将vmin / vmax设置为1(试图强制颜色缩放为单一颜色),但没有成功。 我在scatter文档中没有看到任何其他可能与此设置相关的选项。
谢谢!
对于Matplotlib 1.4+,下面由@fraxel提供的答案是最佳解决方案:使用参数depthshade=False
调用ax.scatter
。
没有可以控制这个问题的参数。以下是一些hack方法。
禁用set_edgecolors
和set_facecolors
方法,使得mplot3d无法更新颜色的alpha部分:
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()
如果您想稍后调用set_edgecolors
和set_facecolors
方法,则可以在禁用它们之前备份这两个方法:
s._set_facecolors, s._set_edgecolors = s.set_facecolors, s.set_edgecolors
ax.scatter(x, y, z, depthshade=0)
cmap = "inferno"; surf = ax.scatter(xx, yy, zz, marker='o', c = zz, cmap = cmap, depthshade = False); fig.colorbar(surf, aspect=40)
- Marine Galantinax.scatter(xval, yval, zval, c=cval, alpha = 1, cmap=plt.cm.gray)
,其中alpha设置为1。 - Marine Galantinfrom 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()