Точечная диаграмма и цветовое отображение в Python
У меня есть диапазон точек x и y, хранящихся в массивах numpy. Они представляют собой x(t) и y (t), где t=0...Т-1
Я строю диаграмму рассеяния с помощью
import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.show()
Я хотел бы иметь цветовую карту, представляющую время (поэтому раскраски точек в зависимости от индекса в массивах numpy)
какой самый простой способ сделать это?
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]
.возможно, более простой для понимания пример-это немного проще
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
соответствуют нижней/верхней части цветов.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()
Colorbars
вы можете добавить colorbar с помощью
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.
чтобы добавить к ответу wflynny выше, вы можете найти доступные цветные карты здесь
пример:
import matplotlib.cm as cm plt.scatter(x, y, c=t, cmap=cm.jet)
или,
plt.scatter(x, y, c=t, cmap='jet')