matplotlib 3D-диаграмма рассеяния с цветом маркера, соответствующим значениям RGB

Я загрузил изображение в массив numpy с использованием mahotas.

import mahotas img = mahotas.imread('test.jpg') 

Каждый пиксель в img представлен массивом значений RGB:

 img[1,1] = [254, 200, 189] 

Я сделал трехмерную диаграмму рассеяния значений R на одной оси, значения G на 2-й оси и значения B на третьей оси. Это не проблема:

 fig = plt.figure() ax = fig.add_subplot(111, projection = '3d') for i in range(1,img.shape[1]+1): xs = img[i,1][0] ys = img[i,1][1] zs = img[i,1][2] ax.scatter(xs, ys, zs, c='0.5', marker='o') ax.set_xlabel('X Label') ax.set_ylabel('Y Label') ax.set_zlabel('Z Label') plt.show() 

(Пока я просто рисую первый столбец изображения).

Как я могу покрасить каждую из точек рассеивания по цвету каждого пикселя изображения? т.е. я думаю, что я хотел бы покрасить точки по их значению RGB, но я не уверен, что это возможно?

One Solution collect form web for “matplotlib 3D-диаграмма рассеяния с цветом маркера, соответствующим значениям RGB”

Да, вы можете сделать это, но это нужно сделать с помощью отдельного механизма, кроме аргумента c . В двух словах используйте facecolors=rgb_array .


Прежде всего, позвольте мне объяснить, что происходит. В Collection которая возвращает scatter есть две «системы» (из-за отсутствия лучшего термина) для настройки цветов.

Если вы используете аргумент c , вы устанавливаете цвета через «систему» ScalarMappable . Это указывает на то, что цвета должны контролироваться путем применения цветовой схемы к одной переменной. (Это метод set_array всего, что наследуется от ScalarMappable .)

В дополнение к системе ScalarMappable цвета коллекции могут быть установлены независимо. В этом случае вы должны использовать facecolors kwarg.


В качестве быстрого примера эти точки будут иметь случайные цвета rgb:

 import matplotlib.pyplot as plt import numpy as np x, y = np.random.random((2, 10)) rgb = np.random.random((10, 3)) fig, ax = plt.subplots() ax.scatter(x, y, s=200, facecolors=rgb) plt.show() 

введите описание изображения здесь

  • Контур гистограммы Python
  • Python xticks в подзаголовках
  • Matplotlib: график нескольких отдельных графиков в цикле
  • График рассеяния Matplotlib с неизвестной ошибкой
  • Matplotlib Colorbar научное обозначение смещения
  • Matplotlib figure facecolor (цвет фона)
  • Виджет слайдера Python Matplotlib не обновляется
  • Указание статистически значимой разницы в гистограмме
  • Python - лучший язык программирования в мире.