Создание cmap, в котором цвета связаны с другой переменной

У меня есть точечная диаграмма следующего формата:

Диаграмма BPT

Каждая точка на этой диаграмме представляет галактику со свойством, известным как скорость звездообразования. Я хочу задать цветовую карту, зависящую от этой переменной, т. е. при более высоких значениях SFR цвет становится более синим, а при более низких значениях SFR цвет становится более красным. (В этом упражнении игнорируйте часть гистограммы с группировкой.)

Как бы я этого добился? Нужно ли мне создавать и изменять свой собственный cmap?


person GCien    schedule 21.07.2014    source источник


Ответы (1)


вам просто нужен точечный график точек с координатами x и y и цветом, представляющим третью переменную?

для этого нужен разброс, просто используйте:

import matplotlib.pyplot as plt

plt.scatter(x, y, c=z, cmap='jet')

вы можете указать любую другую цветовую карту, все возможности показаны здесь: http://matplotlib.org/examples/color/colormaps_reference.html

вот небольшой пример:

import matplotlib.pyplot as plt
import numpy as np
x = numpy.random.normal(0, 2, 100)
y = numpy.random.normal(0, 2, 100)
r = np.sqrt(x**2 + y**2)
plt.scatter(x, y, c=r, cmap='jet')

это даст вам 100 2d-гауссовых распределенных точек с цветами в зависимости от расстояния до (0,0)

person MaxNoe    schedule 22.07.2014
comment
Привет Макс, большое спасибо за ваш ответ. У меня есть один вопрос, представляет ли тогда cmap инкрементальные изменения в третьей переменной, т. е. z=3 и z=3.01... имеют ли они одинаковый грубый цвет? Но будут ли z=3 и z=4 явно отличаться (будь то оттенок или совершенно другой цвет?) - person GCien; 22.07.2014
comment
ValueError: массив цветов должен быть двумерным - person GCien; 23.07.2014
comment
по умолчанию цветная полоса идет линейно от min(z) до max(z). Посмотрите на цветные полосы и попробуйте простые примеры, такие как тот, который я отредактировал в своем посте. с аргументами vmin и vmax, которые вы можете установить, какие значения находятся вверху и внизу цветной полосы. Для ошибки вы должны представить код. - person MaxNoe; 23.07.2014