Ответ 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]
.
Возможно, более понятным примером является немного более простой
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()
Обратите внимание, что массив, который вы передаете как 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.