Matplotlib – мощная библиотека Python для визуализации данных. Одним из ключевых элементов визуализации является цветовая карта (colormap), позволяющая отображать значения данных с помощью цветов. В этой статье мы рассмотрим, как создавать пользовательские цветовые карты в Matplotlib, адаптированные под ваши конкретные данные и задачи.
Основы цветовых карт в Matplotlib
Что такое цветовая карта и зачем она нужна?
Цветовая карта (colormap) – это соответствие между значениями данных и цветами. Она позволяет визуально представлять числовые данные, где цвет отражает величину значения. Использование подходящей цветовой карты может значительно улучшить восприятие данных и выявить скрытые закономерности.
Обзор встроенных цветовых карт в Matplotlib
Matplotlib предоставляет большой выбор встроенных цветовых карт, таких как 'viridis', 'magma', 'coolwarm' и другие. Полный список доступен в документации Matplotlib. Их можно использовать, просто указав имя цветовой карты при создании графика.
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(10, 10)
plt.imshow(data, cmap='viridis')
plt.colorbar()
plt.show()
Создание пользовательской цветовой карты с помощью ListedColormap
ListedColormap позволяет создать цветовую карту на основе заданного списка цветов. Это полезно, когда вам нужны дискретные цвета, представляющие определенные категории или диапазоны значений.
Определение списка цветов для вашей цветовой карты
Определите список цветов в формате RGB, RGBA или шестнадцатеричном формате. Например:
import matplotlib.colors
colors = ['red', 'green', 'blue']
Применение ListedColormap к графикам и диаграммам
Используйте ListedColormap для создания цветовой карты и примените ее к вашему графику. Нормировка данных может быть необходима, чтобы сопоставить значения данных с цветами.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap, BoundaryNorm
data = np.random.randint(0, 3, size=(10, 10))
# Example 1: Create ListedColormap using List
colors = ['red', 'green', 'blue']
cmap = ListedColormap(colors)
# Example 2: Create ListedColormap using hex codes
hex_colors = ['#FF0000', '#00FF00', '#0000FF']
# bounds define the ranges for each color
bounds = [0, 1, 2, 3]
norm = BoundaryNorm(bounds, cmap.N) # Normalize data to the colormap
plt.imshow(data, cmap=cmap, norm=norm)
plt.colorbar(ticks=bounds)
plt.show()
Создание градиентной цветовой карты с помощью LinearSegmentedColormap
LinearSegmentedColormap позволяет создавать плавные градиентные цветовые карты, определяя сегменты и цвета для перехода между ними. Это подходит для представления непрерывных данных.
Принципы работы LinearSegmentedColormap
LinearSegmentedColormap принимает словарь, определяющий сегменты цветовой карты. Каждый сегмент задает изменение цвета (R, G, B) в диапазоне от 0 до 1.
Настройка сегментов и цветов для плавного перехода
Определите словарь сегментов, указав значения для красного, зеленого и синего каналов в каждой точке перехода.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
cdict = {
'red': [[0.0, 0.0, 0.0],
[0.5, 1.0, 1.0],
[1.0, 1.0, 1.0]],
'green': [[0.0, 0.0, 0.0],
[0.5, 1.0, 1.0],
[1.0, 0.0, 0.0]],
'blue': [[0.0, 1.0, 1.0],
[0.5, 0.0, 0.0],
[1.0, 0.0, 0.0]]
}
cm = LinearSegmentedColormap('my_colormap', cdict)
data = np.random.rand(10, 10)
plt.imshow(data, cmap=cm)
plt.colorbar()
plt.show()
Применение и настройка цветовых карт
Использование пользовательских цветовых карт с различными типами графиков (scatter, heatmap, contour)
Пользовательские цветовые карты можно применять к различным типам графиков в Matplotlib. Рассмотрим примеры для scatter, heatmap и contour.
-
Scatter plot:
import matplotlib.pyplot as plt import numpy as np x = np.random.rand(50) y = np.random.rand(50) colors = np.random.rand(50) plt.scatter(x, y, c=colors, cmap='viridis') plt.colorbar() plt.show() -
Heatmap:
import matplotlib.pyplot as plt import numpy as np data = np.random.rand(10, 10) plt.imshow(data, cmap='magma') plt.colorbar() plt.show() -
Contour plot:
import matplotlib.pyplot as plt import numpy as np x, y = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100)) z = np.sin(np.sqrt(x**2 + y**2)) plt.contourf(x, y, z, cmap='coolwarm') plt.colorbar() plt.show()
Добавление и настройка цветовой шкалы (colorbar)
Цветовая шкала (colorbar) позволяет интерпретировать цвета на графике, показывая соответствие между цветами и значениями данных. Ее можно добавить с помощью функции plt.colorbar() и настроить с помощью различных параметров.
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(10, 10)
img = plt.imshow(data, cmap='viridis')
cbar = plt.colorbar(img) # adding colorbar using short command
cbar.set_label('Значение')
plt.show()
# Example 2: Customizing Colorbar
cbar = plt.colorbar(img, ticks=[0, 0.25, 0.5, 0.75, 1]) # added ticks to colorbar
cbar.set_label('Значение')
plt.show()
Заключение
Создание пользовательских цветовых карт в Matplotlib позволяет более эффективно визуализировать данные и адаптировать графики под конкретные задачи. Используя ListedColormap и LinearSegmentedColormap, вы можете создавать как дискретные, так и градиентные цветовые карты, улучшая восприятие и анализ данных.