Python 指定散点图(matplotlib)中每个点的颜色

Python 指定散点图(matplotlib)中每个点的颜色,python,matplotlib,colors,3d,scatter,Python,Matplotlib,Colors,3d,Scatter,我有一个使用matplotlib创建的3D绘图,还有一个对应于每个点的rbg值列表 我有X、Y和Z数据,然后我有一个表格的“颜色列表”: [ (r,g,b), (r,g,b), ... , (r,g,b) ] 匹配每个(x,y,z)点 现在,我有 fig = plt.figure() ax = fig.add_subplot(111, projection = '3d') ax.scatter(X, Y, Z) plt.show() 合并这些rgb元组的适当方式是什么,以便为每个点指定特定

我有一个使用matplotlib创建的3D绘图,还有一个对应于每个点的rbg值列表

我有X、Y和Z数据,然后我有一个表格的“颜色列表”:

[ (r,g,b), (r,g,b), ... , (r,g,b) ]
匹配每个(x,y,z)点

现在,我有

fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')

ax.scatter(X, Y, Z)
plt.show()

合并这些rgb元组的适当方式是什么,以便为每个点指定特定的颜色?

我使用了
for
循环将每个颜色分别指定给每个点。这是我的密码:

X = [1, 2, 3]
Y = [2, 5, 8]
Z = [6, 4, 5]
colors=["#0000FF", "#00FF00", "#FF0066"]

fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')


for i in range(len(X)):
    ax.scatter(X[i], Y[i], Z[i], color=colors[i])
plt.show()

for
循环逐点进行(因此每个X、Y、Z值前面都有
[i]
),并逐个给出颜色。在我的示例中,我使用了十六进制颜色,但如果需要,您可能还可以使用其他颜色。

如果您不想使用for循环(对于大型列表,这可能非常慢),您可以像使用RGB颜色列表一样使用scatter命令,但您需要将颜色指定为介于0和1之间的RGB(或RGBA)值的向量

X = [0, 1, 2]
Y = [0, 1, 2]
Z = [0, 1, 2]
C = np.array([[255, 0, 0], [0, 255, 0], [0, 0, 255]])
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')

ax.scatter(X, Y, Z, c = C/255.0)
plt.show()

下面是一个示例,其中颜色是计算出来的,而不是由文字列表指定的

import matplotlib.pyplot as plt
import numpy as np

phi = np.linspace(0, 2*np.pi, 60)
x = np.sin(phi)
y = np.cos(phi)
rgb_cycle = np.vstack((            # Three sinusoids
    .5*(1.+np.cos(phi          )), # scaled to [0,1]
    .5*(1.+np.cos(phi+2*np.pi/3)), # 120° phase shifted.
    .5*(1.+np.cos(phi-2*np.pi/3)))).T # Shape = (60,3)

fig, ax = plt.subplots(figsize=(3,3))
ax.scatter(x,y, c=rgb_cycle, s=90)
fig.show()

颜色可以指定为十六进制字符串吗?这非常慢。