cod*_*ley 6 python 3d scatter colors matplotlib
我有一个使用matplotlib创建的3D绘图,我有一个与每个点对应的rbg值列表.
我有X,Y和Z数据,然后我有一个表单的"颜色列表":
[ (r,g,b), (r,g,b), ... , (r,g,b) ]
Run Code Online (Sandbox Code Playgroud)
匹配每个(x,y,z)点.
现在,我有
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
ax.scatter(X, Y, Z)
plt.show()
Run Code Online (Sandbox Code Playgroud)
合并这些rgb元组的适当方法是什么,以便为每个点分配特定的颜色?
kma*_*der 19
如果您不希望使用for循环(对于大型列表而言可能非常慢),则可以按原样使用scatter命令与RGB颜色列表一起使用,但是您需要将颜色指定为RGB(或RGBA)的向量)介于0和1之间的值
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()
Run Code Online (Sandbox Code Playgroud)
这是一个示例,其中计算颜色而不是由文字列表指定。
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()
Run Code Online (Sandbox Code Playgroud)
我使用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()
Run Code Online (Sandbox Code Playgroud)
所述for
环推移逐点(因此[i]
在每个X,Y,Z值的前方),并给出一个颜色之一.我使用十六进制颜色作为我的例子,但如果你愿意,你可以使用其他东西.