Цветовая карта с matplotlib

Я пытаюсь представить данные 3D-разброса с помощью matplotlib.

У меня есть 3 массива для построения:

  • массив с X координатами точек
  • массив с координатами Y точек
  • массив со значениями параметров, связанных с каждой точкой (точки, координаты которых описаны в X[] и Y[]

То, что я хотел бы иметь, это:

  • график 2D-облака точек (разброс) для каждой пары (X, Y)
  • каждая точка имеет цвет в соответствии с соответствующим значением в 3-м массиве
  • цветная полоса, представляющая диапазон и значения связанного параметра

У меня проблемы с отображением цветов. Вот минимальный код с комментариями:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap

X = [] # x coordinates array
Y = [] # y coordinates array
parameter = [] # linked parameter values array, each value represents a point. This array is ordered accordingly

# next : the arrays are populated ..
# now I need to plot the point cloud (X,Y) with each point having a color representing the value of the corresponding linked parameter.. 

Я прочитал несколько руководств и понял, что мне нужно создать индивидуальную цветовую карту для параметра. Я попытался создать палитру в соответствии со связанным параметром:

viridisBig = cm.get_cmap('viridis', 512)
newcmp = ListedColormap(viridisBig(np.linspace(np.min(PARAMETER), np.max(PARAMETER), 512)))

Затем называется точечной диаграммой:

plt.scatter(X, Y, cmap=newcmp)
plt.colorbar(cm.ScalarMappable(cmap=newcmp))
plt.show()

Приведенный выше код работает неправильно. Он строит точечную диаграмму с уникальным цветом (синим), а цветная полоса сбоку желтая, как на прикрепленном снимке экрана:

Выходной график

Думаю, я что-то упускаю из виду, связанное с созданием цветовой карты, но я не нашел четких примеров для этого простого случая. Есть идеи?

Заранее спасибо!


person IsmNaj    schedule 02.03.2021    source источник
comment
У вас отсутствует третий аргумент (s) в вашем scatter. . Этот аргумент используется для определения размера и цвета   -  person Tom de Geus    schedule 02.03.2021
comment
Цветовые карты требуют ввода от 0 до 1, они идут вместе с нормами для преобразования другие значения в этом диапазоне. Кроме того, из палитры сложно получить более 256 различных значений цвета.   -  person JohanC    schedule 02.03.2021
comment
Спасибо за ваши комментарии! Проблема решена путем нормализации параметра перед использованием его с цветовой картой в качестве параметров для функции рассеяния.   -  person IsmNaj    schedule 04.03.2021


Ответы (1)


Проблема решена путем нормализации параметра перед использованием его с цветовой картой в качестве параметров для функции рассеяния:

colormap = plt.cm.get_cmap('cool', 512)
normalize = mpl.colors.Normalize(vmin=PARAMETER.min(), vmax=PARAMETER.max())

Потом:

plt.scatter(X, Y, c=PARAMETER, s=5, cmap=colormap, norm=normalize)
person IsmNaj    schedule 04.03.2021