【问题标题】:Set color per point 3d plot numpy/scipy设置每点颜色 3d 绘图 numpy/scipy
【发布时间】:2014-03-14 17:50:29
【问题描述】:

我有一组来自 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 提出使用 scatter 的建议。它可以工作,但是需要比我更多的 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 循环限制为仅每隔一个或每隔四个点绘制一次。

【问题讨论】:

  • 你应该看看this libfreenect example,它使用OpenGL来绘制,会快很多。
  • @IvoFlipse 我试图让它工作但无济于事。我认为链条中的链接太多而无法打破。我真的需要一个 kinect 来让演示工作吗?我只有数据集。欢迎任何其他关于让 OpenGL 为这个应用程序工作的技巧,特别是对于 Python3.x

标签: python-3.x numpy matplotlib scipy


【解决方案1】:

scatterc 参数可以接收一个形状为 (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。
猜你喜欢
  • 2019-03-07
  • 2017-12-28
  • 1970-01-01
  • 2018-09-24
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
相关资源
最近更新 更多