首页 > 解决方案 > Scatter3D:如果添加了标签,则在 Matplotlib 中将颜色和 Alpha 指定为可迭代对象时出错

问题描述

我正在尝试改变 3D 散点图中每个标记的不透明度。我遇到了一个问题,它说颜色的长度不正确(即使它是正确的)。转到最简单的情况,可以用它重新创建它。

import matplotlib.pyplot as plt
import numpy as np


fig, ax = plt.subplots(subplot_kw={'projection': '3d'})
elements = 100
x = np.linspace(0, 10, elements)

ax.scatter(x, x, x, alpha=np.linspace(1, 0.5, elements), c=['b' for _ in range(elements)], label='label')
fig.legend()

plt.show()

如果标签关键字参数被删除,它会起作用。如果您执行 2D 散点图,则无论标签如何,它都可以工作。我想知道这是否是一个错误,但想先看看我是否遗漏了什么。

标签: pythonpython-3.xmatplotlibdata-visualization

解决方案


要完成您想要的,请尝试在散点图中使用set_facecolors而不是直接使用alphaand 。color

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(subplot_kw={'projection': '3d'})
elements = 200

z = np.linspace(0, 2*np.pi, elements)
x = np.cos(z)
y = np.sin(z)

h = ax.scatter(x, y, z, label='label')
h.set_facecolors([[0., 0., 1., alpha] for alpha in np.linspace(0.1, 0.7, len(x))])

fig.legend()
plt.show()

螺旋散点图


推荐阅读