matplotlib 指定三维散点图中每个点的颜色

lyr7nygr  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(220)

我有一个使用matplotlib创建的3D Plot,我有一个对应于每个点的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元组,使每个点将被分配一个特定的颜色?

of1yzvn4

of1yzvn41#

如果不想使用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()

rqqzpn5f

rqqzpn5f2#

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

import numpy as np
from matplotlib.pyplot import subplots

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

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

fdx2calv

fdx2calv3#

我使用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循环逐点进行(因此[i]位于每个X,Y,Z值的前面),并逐个给出颜色。我在示例中使用了十六进制颜色,但如果您愿意,也可以使用其他颜色。

相关问题