В основе работы с цветом в Vega и Vega-Lite лежит абстракция
scale (шкала), где визуальное свойство
color привязывается к домену данных через функцию
отображения значений в цветовые диапазоны.
Ключевая концепция:
Встроенные палитры представляют собой предопределённые цветовые схемы, которые можно использовать без ручного задания массива цветов.
Категориальные схемы предназначены для дискретных данных: классов, категорий, групп.
Наиболее часто используемые встроенные схемы:
category10category20category20bcategory20ctableau10tableau20Эти палитры обеспечивают визуально различимые цвета, оптимизированные для восприятия человеком.
{
"mark": "bar",
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"},
"color": {
"field": "category",
"type": "nominal",
"scale": {
"scheme": "tableau10"
}
}
}
}
Особенности:
Последовательные палитры используются для числовых данных, где важен порядок: интенсивность, величина, плотность.
Основные встроенные схемы:
bluesgreensgreysorangespurplesredsviridismagmainfernoplasmaЭти схемы обычно основаны на градиентах или perceptually uniform colormaps.
{
"mark": "rect",
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"},
"color": {
"field": "value",
"type": "quantitative",
"scale": {
"scheme": "viridis"
}
}
}
}
Особенности:
Дивергентные палитры используются, когда данные имеют центральную точку (обычно 0 или среднее значение), и отклонения важны в обе стороны.
Типичные схемы:
blueorangebrownbluegreenpurplegreenredblueredgreyblueСтруктура:
{
"mark": "rect",
"encoding": {
"color": {
"field": "delta",
"type": "quantitative",
"scale": {
"scheme": "redblue",
"domainMid": 0
}
}
}
}
Особенности:
domainMid)Ordinal-палитры используются для упорядоченных категорий, где важен порядок, но не величина.
Примеры схем:
blues (в ordinal контексте)greenspurplesredsОсобенность заключается в том, что цвета распределяются не по строгому числовому градиенту, а по упорядоченным категориям.
В Vega-Lite цветовая схема задаётся через объект
scale:
"color": {
"field": "group",
"type": "nominal",
"scale": {
"scheme": "set2"
}
}
Дополнительные параметры:
count — количество цветов в палитреextent — диапазон (для sequential/diverging)domain — ручное определение входных значений"scale": {
"scheme": "category10",
"count": 5
}
Это позволяет контролировать подмножество палитры.
В Vega глобальные настройки палитр задаются через
config.scale:
{
"config": {
"scale": {
"scheme": "tableau10"
}
}
}
Также можно переопределять поведение конкретных типов шкал:
{
"config": {
"range": {
"category": ["#1f77b4", "#ff7f0e", "#2ca02c"]
}
}
}
Хотя обе системы используют общую идеологию, различия проявляются в уровне абстракции:
scale объектамиencodingscaleschemeПара scheme + count определяет, сколько цветов будет
извлечено из палитры:
{
"scale": {
"scheme": "set3",
"count": 8
}
}
Поведение:
count < max scheme size — используется
подмножествоcount > scheme size — происходит интерполяция
или циклированиеНекоторые схемы поддерживают непрерывную интерполяцию:
viridismagmainfernoplasmaОни используют непрерывное цветовое пространство и обеспечивают равномерное восприятие градиентов.
Выбор схемы зависит от структуры данных:
category10,
tableau10viridis, bluesredblue, purplegreentableau20В Vega и Vega-Lite цветовые схемы могут быть централизованы через конфигурацию тем:
{
"config": {
"range": {
"category": "tableau10"
}
}
}
Это обеспечивает единый визуальный стиль всех графиков в приложении.
| Тип данных | Тип шкалы | Примеры схем |
|---|---|---|
| Категории | ordinal | category10, tableau10 |
| Порядковые | ordinal | set2, set3 |
| Числовые | sequential | viridis, blues |
| Отклонения | diverging | redblue, purplegreen |
При превышении количества категорий доступных цветов:
Это поведение зависит от типа схемы и реализации шкалы.
Хотя встроенные палитры покрывают большинство задач, допускается определение собственного диапазона:
"scale": {
"range": ["#22223b", "#4a4e69", "#9a8c98", "#c9ada7", "#f2e9e4"]
}
В этом случае встроенная схема не используется, и контроль полностью переходит к разработчику.