我有一组来自kinect的数据点,形式为[x,y,z,r,g,b],我想绘制[x,y,z],将点设置为[r,g ,b]。到目前为止,我唯一能够完成的是改变每行的颜色,因为根据我的要求,情节需要分布。
到目前为止,这是我的代码:
i = 0
for frame in data[0]:
fig = figure()
ax2 = fig.gca(projection='3d')
for col in frame:
color_value=(median(col[:,3])/255, median(col[:,4])/255, median(col[:,5])/255)
ax2.scatter(col[:,0],col[:,2]*(-1),col[:,1],color=color_value, alpha=0.25 )
print(str(i))
i += 1
savefig(working_dir + 'images/scatter_point' + str(i) + '.png', bbox_inches='tight')
修改 感谢HYRY提出使用分散的建议。它可以工作,但是我需要更多的RAM才能在640x480的图像中实际工作。对于寻找此类事物的任何人来说,为了将来的参考,操作线是:
ax2.scatter(frame[i][j][0], frame[i][j][2]*(-1), frame[i][j][1], color = (frame[i][j][3]/255, frame[i][j][4]/255, frame[i][j][5]/255), marker = 's', s=0.25)
marker= 's'
表示使用正方形而不是点,s=0.25
将点设置得更小。
如果你想做一个较低分辨率的图像,限制for循环只能每隔一个或每四个点绘制一次。
答案 0 :(得分:1)
c
scatter
参数可以接收一个形状数组(N,3),其值介于0到1之间,表示RGB中的颜色:
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
x = np.random.sample(20)
y = np.random.sample(20)
z = np.random.sample(20)
c = np.random.rand(20, 3)
s = ax.scatter(x, y, z, c=c)
plt.show()
这是输出: