Учитывая, что дескриптор представляет собой двумерный массив, состоящий из [r, g, b] значений для каждой точки:
Вы даете все 3 координаты для каждой точки для всех 3 параметра x, y, z в функции scatter (). Вместо descriptor[0], descriptor[0], descriptor[0]
вам нужно получить доступ descriptor[:,0], descriptor[:,1], descriptor[:,2]
к пользовательским значениям r, g и b соответственно для координат x, y и z.
Matplotlib принимает двумерный массив кортежей значений r, g, b как цвет, но они должны находиться в диапазоне [0,1], поэтому color = descirptor/255
Это мой код:
color = descriptor/255
fig = plt.figure()
axis = fig.add_subplot(111, projection = '3d')
axis.scatter(descriptor[:,0],descriptor[:,1],descriptor[:,2], facecolor = color, marker = 'o')
axis.set_xlim(0,255)
axis.set_ylim(0,255)
axis.set_zlim(0,255)
С образцами данных:
descriptor = np.array([[70,70,115],[112,255,95],[0,0,0],[255,255,255],[125,125,125],[255,0,0],[0,255,0],[0,0,255],[255,255,0],[0,255,255],[255,0,255]])
Вывод:
введите описание изображения здесь
Изменить: с учетом данных вашего примера
a = [np.random.randint(10,240,3) for _ in range(20)]
descriptor = a
Вам нужно сначала изменить тип данных массива на numpy (чтобы использовать многомерное индексирование ) так:
descriptor = numpy.array(a)