Точечная диаграмма и цветовое отображение в Python


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

Я строю диаграмму рассеяния с помощью

import matplotlib.pyplot as plt

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

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

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

2 56

2 ответа:

вот пример

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 соответствуют нижней/верхней части цветов.

Colormaps

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

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

импорт matplotlib.cm не является обязательным, как вы можете назвать colormaps как cmap="cmap_name" так же хорошо. Там есть ссылка на страницу цветных карт, показывающих, как выглядит каждый из них. Также знайте, что вы можете изменить цветовую карту, просто вызвав ее как 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()

enter image description here

Colorbars

вы можете добавить colorbar с помощью

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

enter image description here

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

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

пример:

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

или,

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