Python matplotlib plot plot: изменение цвета точек данных на основе данных условий

У меня есть следующие данные (четыре массива равной длины):

a = [1, 4, 5, 2, 8, 9, 4, 6, 1, 0, 6]
b = [4, 7, 8, 3, 0, 9, 6, 2, 3, 6, 7]
c = [9, 0, 7, 6, 5, 6, 3, 4, 1, 2, 2]
d = [La, Lb, Av, Ac, Av, By, Lh, By, Lg, Ac, Bt]

Я делаю 3D-график массивов a, b, c:

import pylab
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(a,b,c)

plt.show()

Теперь Я хочу покрасить эти разбросанные точки с помощью массива с именем 'd', чтобы: если первая буква соответствующего значения i-го элемента в d равна "L", затем окрашивайте точку красным цветом, если она начинается с цвета "A", она зеленая, и если она начинается с "B", цвет ее синий.

Итак, первая точка (1,4,9) должна быть красной, вторая (4,7,0) красная тоже, третья (5,8,7) должна быть зеленой и т.д.

Можно ли это сделать? Пожалуйста, помогите, если у вас есть идея:)

Ответ 1

Как объясняется в документации для scatter, вы можете передать аргумент c:

c: цвет или последовательность цветов, необязательно, по умолчанию

c может быть одна строка формата цвета или последовательность цветовых спецификаций длины N или последовательность из N чисел, которые должны отображаться в цвета с использованием cmap и нормы, указанной через kwargs (см. ниже). Заметка что c не должно быть одиночной числовой RGB или RGBA-последовательностью, поскольку который неотличим от массива значений, которые должны быть сопоставлены. с может быть двухмерным массивом, в котором строки являются RGB или RGBA.

Так что-то вроде

use_colours = {"L": "red", "A": "green", "B": "blue"}
ax.scatter(a,b,c,c=[use_colours[x[0]] for x in d],s=50)

должен производить

coloured points

Ответ 2

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.scatter

c : color or sequence of color, optional, default

"c может быть единственной строкой формата цвета или последовательностью цветовых спецификаций длины N или последовательностью N чисел, которые должны отображаться в цвета с использованием cmap и нормы, указанной через kwargs (см. ниже). Обратите внимание, что c не должна быть одной числовой RGB или RGBA-последовательностью, потому что это неотличимо от массива значений, которые должны быть сопоставлены. c может быть двухмерным массивом, в котором строки RGB или RGBA, однако.

Вы пробовали это?