2024-05-04 02:34:41 发布
网友
我用scatter和mplot3d函数绘制三维散点图。我为绘图中的所有点选择一种颜色,但是当用matplotlib绘制时,点的透明度设置为相对于相机的距离。有什么方法可以禁用这个功能吗?在
我尝试过将alpha kwarg设置为None/1,并将vmin/vmax设置为1(试图强制颜色缩放为纯色单色),但没有成功。在散点文档中,我没有看到其他与此设置相关的选项。在
谢谢!在
对于Matplotlib 1.4+,下面由@fraxel提供的答案是最佳解决方案:使用参数depthshade=False调用ax.scatter。
depthshade=False
ax.scatter
没有任何参数可以控制这一点。这里有一些破解方法。
禁用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()
如果以后要调用set_edgecolors和set_facecolors方法,可以在禁用这两个方法之前备份它们:
如果只想禁用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)
对于Matplotlib 1.4+,下面由@fraxel提供的答案是最佳解决方案:使用参数
depthshade=False
调用ax.scatter
。没有任何参数可以控制这一点。这里有一些破解方法。
禁用
set_edgecolors
和set_facecolors
方法,以便mplot3d无法更新颜色的alpha部分:如果以后要调用
^{pr2}$set_edgecolors
和set_facecolors
方法,可以在禁用这两个方法之前备份它们:如果只想禁用alpha调整,可以覆盖zalpha函数。这将允许您在交互式绘图的情况下更新颜色,同时仍然删除深度雾。
相关问题 更多 >
编程相关推荐