Опираясь на комментарий @ ImportanceOfBeingEarnest , для ваших текущих значений labels
вы не получите желтый цвет, если учтете одинаково разнесенный диапазон 0-33.33, 33.34-66.66, 66.67- 100. Следующий ответ подчеркивает это. Второй рисунок ниже показывает желтый цвет, если у вас есть labels
, попадающий в правильный диапазон. Проверьте официальную страницу , чтобы увидеть больше примеров на BoundaryNorm
.
Ключевая строка здесь ranges = np.linspace(labels.min(), labels.max(), len(color_list)+1)
, которая делит ваш диапазон значений (labels
) на равные интервалы.
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
labels = np.array([ 0, 1, 1, 100, 100]) # converted to array for ease
X = np.array([[0, 2], [0, 0], [1, 0], [5, 0], [5, 2]])
color_list = ["red", "yellow", 'blue']
cmap = mpl.colors.ListedColormap(color_list)
ranges = np.linspace(labels.min(), labels.max(), len(color_list)+1)
norm = mpl.colors.BoundaryNorm(ranges, cmap.N)
plt.scatter(X[:,0], X[:,1], c=labels, cmap=cmap, s=200, norm=norm)

с желтыми точками
labels = np.array([ 0, 56, 63, 100, 100]) # <--- new label values
X = np.array([[0, 2], [0, 0], [1, 0], [5, 0], [5, 2]])
color_list = ["red", "yellow", 'blue']
cmap = mpl.colors.ListedColormap(color_list)
ranges = np.linspace(labels.min(), labels.max(), len(color_list)+1)
norm = mpl.colors.BoundaryNorm(ranges, cmap.N)
plt.scatter(X[:,0], X[:,1], c=labels, cmap=cmap, s=200, norm=norm)
