设置每点颜色3d绘图numpy / scipy

时间:2014-03-14 17:50:29

标签: python-3.x numpy matplotlib scipy

我有一组来自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循环只能每隔一个或每四个点绘制一次。

1 个答案:

答案 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()

这是输出:

enter image description here