Подтвердить что ты не робот

График рассеяния и цветовое сопоставление в Python

У меня есть диапазон точек x и y, хранящихся в массивах numpy. Они представляют x (t) и y (t), где t = 0... T-1

Я рисую график рассеяния, используя

import matplotlib.pyplot as plt

plt.scatter(x,y)
plt.show()

Я хотел бы иметь colormap, представляющий время (поэтому окрашивание точек в зависимости от индекса в массивах numpy)

Каков самый простой способ сделать это?

4b9b3361

Ответ 1

Вот пример

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(100)
y = np.random.rand(100)
t = np.arange(100)

plt.scatter(x, y, c=t)
plt.show()

Здесь вы устанавливаете цвет на основе индекса, t, который является всего лишь массивом [1, 2, ..., 100]. enter image description here

Возможно, более понятным примером является немного более простой

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = x
t = x
plt.scatter(x, y, c=t)
plt.show()

enter image description here

Обратите внимание, что массив, который вы передаете как c, не нуждается в каком-либо конкретном порядке или типе, т.е. его не нужно сортировать или целые числа, как в этих примерах. Процедура построения графика масштабирует цветовую палитру таким образом, чтобы минимальные/максимальные значения в c соответствовали нижней/верхней части цветовой карты.

цветовые карты

Вы можете изменить цветовую палитру, добавив

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.cmap_name)

Импортирование matplotlib.cm является необязательным, так как вы также можете вызывать colormaps как cmap="cmap_name". Существует справочная страница цветовых карт, показывающих, на что похоже. Также знайте, что вы можете отменить colormap, просто называя его cmap_name_r. Поэтому либо

plt.scatter(x, y, c=t, cmap=cm.cmap_name_r)
# or
plt.scatter(x, y, c=t, cmap="cmap_name_r")

будет работать. Примерами являются "jet_r" или cm.plasma_r. Вот пример с новым 1.5 colormap viridis:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = x
t = x
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(x, y, c=t, cmap='viridis')
ax2.scatter(x, y, c=t, cmap='viridis_r')
plt.show()

введите описание изображения здесь

ColorBars

Вы можете добавить цветную панель с помощью

plt.scatter(x, y, c=t, cmap='viridis')
plt.colorbar()
plt.show()

введите описание изображения здесь

Обратите внимание, что если вы явно используете цифры и подзаголовки (например, fig, ax = plt.subplots() или ax = fig.add_subplot(111)), добавление цветовой панели может быть немного более сложным. Хорошие примеры можно найти здесь для одного подсети colorbar и здесь для 2 подзаголовков 1 colorbar.

Ответ 2

Чтобы добавить к wflynny ответ выше, вы можете найти доступные цветовые коды здесь

Пример:

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.jet)

или, альтернативно,

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