plt.scatter не может распознать карту, созданную ListedColormap () - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь настроить Colormap с помощью ListedColormap () для точечной диаграммы.

Вот набор данных для точечной диаграммы:

labels = [  0,   1,   1, 100, 100]
X = np.array([[0, 2],
       [0, 0],
       [1, 0],
       [5, 0],
       [5, 2]])

Этот фрагмент кода

color_list = ["red", "yellow", 'blue']
cmap = mpl.colors.ListedColormap(color_list)
plt.scatter(X[:,0], X[:,1], c=labels, cmap=cmap, s=200);

выходы

enter image description here

Кажется, что plt.scatter не может распознать cmap, сгенерированный ListedColormap().

Я построил cmap так, чтобы точки в левом нижнем углу были желтыми, чего не происходит.

Мое понимание (0 -> красный, 1 -> желтый, 100 -> синий) о порядке цветов может быть неправильным.

Любая подсказка будет оценена.

1 Ответ

0 голосов
/ 17 июня 2019

Опираясь на комментарий @ 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)

enter image description here

с желтыми точками

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)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...