Python 3.x 设置逐点颜色三维打印numpy/scipy

Python 3.x 设置逐点颜色三维打印numpy/scipy,python-3.x,numpy,matplotlib,scipy,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

我有一组来自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提出的使用散布的建议。它可以工作,但是要在640x480图像中实际工作,需要比我更多的RAM。对于寻找此类物品的任何人,其操作路线为:

    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循环限制为仅每隔一点或每四点打印一次。

scatter
c
参数可以接收一个形状数组(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()
以下是输出:


谢谢你的建议。这确实有效,但由于图像是640x480,因此需要花费很长时间,而且我的计算机通常在实际渲染整个图形之前内存不足。如果我只绘制其他点,它可以在锁定之前绘制出至少一个图形。不幸的是,这个用例似乎没有被考虑用于numpy。你应该看看它,它使用OpenGL绘制,速度会快得多。@IvoFlipse我试图让它工作,但没有效果。我想链条上的链接太多了,无法断开。我真的需要kinect才能让演示正常工作吗?我只有数据集。任何关于让OpenGL为这个应用程序工作的其他提示都是受欢迎的,尤其是对于Python3.x