Matplotlib — популярная библиотека Python, используемая для визуализации данных и построения графиков. Одной из наиболее распространенных задач при использовании matplotlib является установка цветовой карты (также называемой цветовой картой) для графика. Цветовая карта управляет цветами, используемыми для сопоставления значений данных с цветами на графике. Matplotlib предоставляет широкий спектр встроенных цветовых карт на выбор. В этой статье мы рассмотрим различные параметры цветовой карты, доступные в matplotlib, и способы их эффективного использования для визуализации данных.
Цветовая карта по сути является сопоставлением значений данных с цветами. Она используется для назначения цветов элементам графика, таким как линии, поверхности, точки рассеяния и т. д., на основе значений данных, связанных с ними. Например, на поверхностном графике двумерной функции z=f(x,y) цветовая карта назначает цвета пикселям на графике на основе z-значений, вычисленных из функции f(x,y) в этих местоположениях пикселей.
Некоторые распространенные применения цветовых карт:
В Matplotlib есть модуль, предназначенный для цветовых карт, который называется matplotlib.cm. Этот модуль содержит коллекцию предопределенных цветовых карт, которые можно использовать в визуализациях matplotlib. Параметр cmap в функциях построения графиков matplotlib используется для указания цветовой карты. Также существуют вспомогательные функции, такие как colormap.ScalarMappable, которые могут сопоставлять значения данных с цветами цветовой карты.
Цветовые карты Matplotlib можно разделить на три категории:
Они сопоставляют значения данных с цветами по последовательному спектру. Низкие значения данных сопоставляются с цветами на одном конце спектра, а высокие значения данных сопоставляются с цветами на другом конце. Последовательные цветовые карты хороши для визуализации данных, которые имеют естественный порядок или организации данных от низких к высоким значениям. Вот некоторые распространенные последовательные цветовые карты:
Они отображают низкие и высокие значения данных в различные цвета с переходным цветом посередине. Переходный цвет используется для обозначения критического значения средней точки в данных. Расходящиеся цветовые карты полезны, когда необходимо выделить определенное среднее значение в визуализируемых данных. Вот некоторые распространённые расходящиеся цветовые карты:
Они сопоставляют дискретные значения данных с набором отдельных цветов. Категориальные цветовые карты не подразумевают никакого порядка цветов, а просто используют разные цвета для различения категорий. Они полезны для визуализации категориальных данных. Вот некоторые распространенные категориальные цветовые карты:
Вот некоторые из наиболее часто используемых цветовых карт в matplotlib:
Это последовательная цветовая карта по умолчанию в matplotlib. Она перцептивно однородна и подходит для дальтоников. Цвета варьируются от синего до желтого.
Это еще одна перцептивно однородная цветовая карта, которая идет от черного до желтого. Полезно для визуализации горячих или ярких данных.
Перцептивная однородная цветовая карта от черного до белого, полезна для визуализации с высокой контрастностью.
Расходящаяся цветовая карта от синего до красного с белой средней точкой, подходит для отклонения отрицательных/положительных значений.
Расходящаяся цветовая карта от красного до синего с белой средней точкой. Помогает выделить порог среднего значения.
Качественная цветовая карта с 20 отдельными цветами, полезная для визуализации до 20 отдельных категорий.
Компактная качественная цветовая карта с 10 цветами для меньшего количества категорий.
Последние версии matplotlib (>=2.0) добавили новые цветовые карты, такие как viridis, magma, inferno и plasma, которые перцептуально однородны. Это означает, что равные шаги в значениях данных визуально воспринимаются как равные шаги в цветовой карте. Традиционно цветовые карты, такие как jet, имеют тенденцию к неравномерному перцептивному контрасту, что может искажать визуализацию. Перцептивно однородные цветовые карты устраняют эту проблему и значительно улучшают способность понимать изменения в данных. Их следует предпочесть для последовательных данных.
Некоторые цветовые карты, такие как viridis, разработаны для дальтоников, избегая цветов, которые трудно различить людям с дальтонизмом. При создании визуализаций для публичного использования важно убедиться, что выбранные цветовые карты удобны для дальтоников. Некоторые варианты: viridis, plasma и magma для последовательных данных и coolwarm для расходящихся данных. Избегайте радужных цветовых карт.
Matplotlib также позволяет создавать пользовательские цветовые карты, указывая список цветов, входящих в цветовую карту. Например:
from matplotlib.colors import LinearSegmentedColormap cm = LinearSegmentedColormap.from_list('custom', ['red', 'green', 'blue']) Это создает пользовательскую 3-цветную последовательную цветовую карту. Мы можем указать любые цвета и любое количество цветов в списке по мере необходимости. Пользовательские цветовые карты дают полную гибкость в компромиссе между количеством цветов и однородностью восприятия.
Цветовые карты Matplotlib обычно нормализуются для сопоставления значений данных в диапазоне [0, 1] с цветами. Однако нам часто необходимо сопоставлять пользовательские диапазоны данных с цветовой картой. Это можно сделать с помощью аргументов vmin и vmax для функций построения графиков в matplotlib. Например:
plot(data, vmin=-100, vmax=500, cmap='coolwarm') Это сопоставит значения данных в диапазоне от -100 до 500 с цветовой картой coolwarm. Значения ниже -100 получат самый низкий цвет цветовой карты, а значения выше 500 получат самый высокий цвет цветовой карты.
Класс matplotlib.colors.Normalize также можно использовать для настройки нормализации данных для цветовых карт. Это дает больше контроля над масштабированием, включая сопоставление только части цветовой карты значениям данных или применение нелинейного масштабирования.
Для расходящихся цветовых карт, таких как coolwarm или RdBu, мы часто хотим явно задать значение данных, которое сопоставляется с центральным/переходным цветом в цветовой карте. Это делается с помощью аргумента center для Normalize. Например:
from matplotlib.colors import Normalize norm = Normalize(vmin=-100, vmax=150, center=0) plot(data, cmap='coolwarm', norm=norm) Здесь 0 будет сопоставлен с белой средней точкой цветовой карты coolwarm. Значения данных от -100 до 0 будут иметь синеватые цвета, а значения от 0 до 150 будут иметь красноватые цвета.
Качественные цветовые карты, которые полезны для категориальных данных:
| Цветовая карта | Количество цветов |
|---|---|
| tab10 | 10 |
| tab20 | 20 |
| tab20b | 20 |
| tab20c | 20 |
| Pastel1 | 9 |
| Pastel2 | 8 |
| Paired | 12 |
| Accent | 8 |
| Dark2 | 8 |
| Set1 | 9 |
| Set2 | 8 |
| Set3 | 12 |
Они предоставляют широкий диапазон различных цветов для визуализации до 10-20 категорий на графиках.
Рекомендуемые цветовые карты для последовательных данных:
| Цветовая карта | Описание |
|---|---|
| viridis | Перцептивно однородный, от синего до желтого |
| plasma | Перцептивно однородный, от фиолетового до желтого |
| inferno | Перцептивно однородный, от черного до желтого |
| magma | Перцептивно однородный, от черного до белого |
| cividis | Перцептивно однородный, от синего до желтого |
| Серые | От белого до черного в оттенках серого |
| Фиолетовые | От белого до фиолетового |
| Синие | От белого до синего |
| Зеленые | От белого до зеленого |
| Оранжевые | От белого до оранжевого |
| Красные | От белого до красного |
Рекомендуемые цветовые карты для расходящихся данных вокруг центральной точки:
| Цветовая карта | Описание |
|---|---|
| холодныйтеплый | От синего к красному с белой серединой |
| PiYG | От розового к зеленому с белой серединой |
| PRGn | От фиолетового к зеленому с белой серединой |
| PuOr | От фиолетового к оранжевому с белой серединой |
| RdBu | От красного к синему с белой серединой |
| RdYlBu | От красного к желтому к синему с белой серединой |
| RdYlGn | От красного к от желтого до зеленого с белой средней точкой |
| Спектральный | От красного до синего с ненасыщенными цветами |
Цветовую карту по умолчанию в matplotlib можно задать глобально с помощью:
import matplotlib.pyplot as plt plt.rcParams['image.cmap'] = 'viridis' Это сделает viridis цветом по умолчанию для всех графиков, созданных в сеансе. Похожие rcParams существуют для определенных типов графиков, таких как image, pcolor, scatter и т. д.
Значение по умолчанию можно вернуть к исходному с помощью:
plt.rcParams['image.cmap'] = None Подводя итог, можно сказать, что эффективное использование цветовых карт включает в себя:
Matplotlib предоставляет широкий выбор цветовых карт, которые покрывают большинство потребностей визуализации данных. Аргумент cmap и модуль matplotlib.cm предоставляют доступ как к встроенным, так и к пользовательским цветовым картам для универсального управления цветовым отображением на графиках.
В этой статье мы рассмотрели различные параметры цветовых карт, доступные в matplotlib. Ключевые моменты:
Универсальные параметры цветовых карт Matplotlib, а также возможность создания пользовательских карт, позволяют осуществлять детальный контроль над цветами, используемыми для визуализации данных на графиках Python.