Розсіяний сюжет та відображення кольорів у Python


91

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

Я складаю графік розсіювання за допомогою

import matplotlib.pyplot as plt

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

Я хотів би мати карту кольорів, що відображає час (тому розфарбовуємо точки в залежності від індексу в масивах numpy)

Який найпростіший спосіб це зробити?

Відповіді:


168

Ось приклад

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є обов’язковим, оскільки ви можете так 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()

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

Панелі кольорів

Ви можете додати кольорову панель за допомогою

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

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

Зверніть увагу, що якщо ви явно використовуєте малюнки та підзаголовки (наприклад, fig, ax = plt.subplots()або ax = fig.add_subplot(111)), додавання кольорової панелі може бути дещо більш залученим. Хороші приклади можна знайти тут для однієї кольорової панелі додаткових ділянок, а тут для 2 додаткових графічних панелей 1 .


1
Ви можете отримати легенду кольорів за допомогою plt.colorbar()команди.
drevicko

Здається, тут змінився код. Cmap = cm.colormap_name тепер має бути cmap = cm.cmapname.
Кріс

@ cmarti1138 Я не впевнений, що ви маєте на увазі, cm.colormap_nameа cm.cmapnameне фактичні змінні в matplotlib.cm; це просто псевдокод для cm.jetабо cm.veridis_rтощо
wflynny

Чи є спосіб змінити cmapабо cсписок вже побудованої кривої?
Гімуте

10

Щоб додати відповідь wflynny вище, ви можете знайти доступні кольорові карти тут

Приклад:

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

або, як варіант,

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

3

Колонна панель підрозділу

Для підрозділів із розкидуванням ви можете навести кольорову панель на свої осі, побудувавши «відображуваний» за допомогою другорядної фігури, а потім додавши його до початкового сюжету.

Як продовження наведеного прикладу:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
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')


# Build your secondary mirror axes:
fig2, (ax3, ax4) = plt.subplots(1, 2)

# Build maps that parallel the color-coded data
# NOTE 1: imshow requires a 2-D array as input
# NOTE 2: You must use the same cmap tag as above for it match
map1 = ax3.imshow(np.stack([t, t]),cmap='viridis')
map2 = ax4.imshow(np.stack([t, t]),cmap='viridis_r')

# Add your maps onto your original figure/axes
fig.colorbar(map1, ax=ax1)
fig.colorbar(map2, ax=ax2)
plt.show()

Розсіяти підзаголовки кольоровою стрічкою

Зверніть увагу, що ви також виведете вторинну цифру, яку ви можете ігнорувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.