使用Python和matplotlib控制三维散点图的alpha值

2024-05-04 02:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我用scatter和mplot3d函数绘制三维散点图。我为绘图中的所有点选择一种颜色,但是当用matplotlib绘制时,点的透明度设置为相对于相机的距离。有什么方法可以禁用这个功能吗?在

我尝试过将alpha kwarg设置为None/1,并将vmin/vmax设置为1(试图强制颜色缩放为纯色单色),但没有成功。在散点文档中,我没有看到其他与此设置相关的选项。在

谢谢!在


Tags: 方法函数功能alphanone绘图距离matplotlib
3条回答

对于Matplotlib 1.4+,下面由@fraxel提供的答案是最佳解决方案:使用参数depthshade=False调用ax.scatter

没有任何参数可以控制这一点。这里有一些破解方法。

禁用set_edgecolorsset_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()

enter image description here

如果以后要调用set_edgecolorsset_facecolors方法,可以在禁用这两个方法之前备份它们:

^{pr2}$

如果只想禁用alpha调整,可以覆盖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)

相关问题 更多 >