我尝试在3D中可视化点的分类。当我给予散射函数中的“c”参数分类时,结果与预期的一样。但是当我给予与“alpha”参数完全相同的分类时,它似乎变成了噪音。
下面是一个正弦波的例子。(我缩放了alpha参数,以显示它只是噪声)
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
mpl.rcParams['figure.facecolor'] = 'white'
# Orientation sampling
angles = range(0,360,10)
euler = np.array([[[[x,y,z] for z in angles] for y in angles] for x in angles])
euler = euler.reshape((-1,3))
# Make some classification
cls = np.abs(np.sin(euler.mean(1)))
print("min:", cls.min())
print("max:", cls.max())
print("mean:", cls.mean())
# visualize
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(euler[:,0],euler[:,1],euler[:,2], c=cls, s=5, alpha=1.0, cmap='viridis')
plt.show()
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter(euler[:,0],euler[:,1],euler[:,2], c='b', s=5, alpha=cls**10/10)
plt.show()
字符串
输出量:
min: 0.0
max: 0.9999727218865074
mean: 0.6366588835775282
型c=cls
显示了一个很好的正弦波:
的数据alpha=cls**10/10
显示具有随机alpha值的点:
的
我希望在为alpha值分配分类时看到相同的模式。
我目前通过使用点大小来隐藏较低分类的点来解决这个问题。
1条答案
按热度按时间b1zrtrql1#
目前还不清楚这是怎么回事。通常情况下,自matplotlib 3.4以来,alpha作为数组支持散点图,无论是2D还是3D。与
c
参数不同,它会自动转换为0 - 1的范围,alpha参数应该已经在正确的范围内。不过,使用带有alpha值的色彩Map表也可以获得相同的效果。
下面是一个示例:
字符串
x1c 0d1x的数据
由于这里使用了
c
参数,它会自动扩展到0到1的范围。您可以尝试使用vmin
和vmax
来更改范围。或者您可以在创建LinearSegmentedColormap
时使用不同的较低alpha(可选地颠倒颜色的顺序)。