Области — Area

Примитив area представляет несколько элементов данных одной заполненной областью. Такие диаграммы часто показывают изменения во времени: одной областью или областями с накоплением.

Свойства областей

Определение area поддерживает любые стандартные свойства, а также интерполяцию и наложение линий и точек:

Нажмите, чтобы показать таблицу
СвойствоТипОписание
alignanyOf(Align, ExprRef)

Горизонтальное выравнивание текста или примитивов с диапазоном: area, bar, image, rect, rule. Значения: "left", "right", "center". Для примитивов с диапазоном ссылки на выражения не поддерживаются.

baselineanyOf(TextBaseline, ExprRef)

Для текста — вертикальная базовая линия: "alphabetic", используемая по умолчанию, "top", "middle", "bottom", "line-top", "line-bottom" либо ссылка на выражение, возвращающее допустимое значение. line-top и line-bottom похожи на top и bottom, но вычисляются относительно lineHeight, а не только fontSize. Для примитивов с диапазоном — вертикальное выравнивание "top", "middle" или "bottom"; ссылки на выражения для них не поддерживаются.

orientOrientation

Ориентация диаграмм bar без накопления, tick, area и line: horizontal, используемая по умолчанию, либо vertical. Для bar, rule и tick определяет, к x или y применяется размер. Для area задаёт orient результата Vega. Для line и trail определяет порядок сортировки точек, если config.sortLineBy не задан. При накоплении ориентация определяется самим накоплением, и явно заданное значение игнорируется.

interpolateanyOf(Interpolate, ExprRef)

Способ интерполяции линий и областей:

  • "linear" — последовательность прямых отрезков.
  • "linear-closed" — замкнутые отрезки, образующие многоугольник.
  • "step" — чередующиеся горизонтальные и вертикальные отрезки.
  • "step-before" — чередующиеся вертикальные и горизонтальные отрезки.
  • "step-after" — чередующиеся горизонтальные и вертикальные отрезки.
  • "basis" — B-сплайн с дублированием крайних контрольных точек.
  • "basis-open" — открытый B-сплайн, который может не проходить через начало или конец.
  • "basis-closed" — замкнутый B-сплайн.
  • "cardinal" — кардинальный сплайн с дублированием крайних контрольных точек.
  • "cardinal-open" — открытый кардинальный сплайн: может не проходить через начало и конец, но проходит через остальные контрольные точки.
  • "cardinal-closed" — замкнутый кардинальный сплайн.
  • "bundle" — аналог basis, но tension используется для выпрямления сплайна.
  • "monotone" — кубическая интерполяция, сохраняющая монотонность по y.
tensionanyOf(number, ExprRef)

Параметр натяжения для line и area, в зависимости от типа интерполяции.

lineanyOf(boolean, OverlayMarkDef)

Флаг добавления линии поверх area либо объект свойств наложенной линии. При {} или true используются стандартные свойства; при false линия автоматически не добавляется. По умолчанию: false.

pointanyOf(boolean, OverlayMarkDef, string)

Флаг добавления точек поверх line или area либо объект свойств этих точек. При "transparent" добавляются прозрачные точки для улучшения подсказок и выбора; при {} или true — заполненные точки со стандартными свойствами; при false точки автоматически не добавляются. По умолчанию: false.

Примеры

Диаграмма с областью

Временное или порядковое поле, обычно по x, и количественное поле, обычно по y, создают диаграмму с областью. Например, покажем изменение числа безработных в США:

import altair as alt
from altair.datasets import data

source = data.unemployment_across_industries.url

alt.Chart(source).mark_area().encode(
    x="yearmonth(date):T",
    y="sum(count):Q",
).properties(width=300, height=200)

Область с линиями и точками

Свойства line и point, равные true или объекту свойств наложенных примитивов, добавляют поверх области линии и маркеры точек:

import altair as alt
from altair.datasets import data

source = data.stocks.url

alt.Chart(source).mark_area(line=True, point=True).encode(
    x="date:T",
    y="price:Q",
).transform_filter(
    alt.datum.symbol == "GOOG"
)

Вместо одноцветной заливки можно использовать градиент. Здесь также настраивается наложенная линия. Подробнее о градиентах см. документацию Vega-Lite:

import altair as alt
from altair.datasets import data

source = data.stocks()

alt.Chart(source).transform_filter(alt.datum.symbol == "GOOG").mark_area(
    line={"color": "darkgreen"},
    color=alt.Gradient(
        gradient="linear",
        stops=[
            alt.GradientStop(color="white", offset=0),
            alt.GradientStop(color="darkgreen", offset=1),
        ],
        x1=1,
        x2=1,
        y1=1,
        y2=0,
    ),
).encode(
    alt.X("date:T"),
    alt.Y("price:Q"),
)

Области с накоплением

Добавление цветового поля по умолчанию создаёт диаграмму с накоплением. Разделим область по отраслям:

import altair as alt
from altair.datasets import data

source = data.unemployment_across_industries.url

alt.Chart(source).mark_area().encode(
    alt.X("yearmonth(date):T").axis(format="%Y", domain=False, tickSize=0),
    alt.Y("sum(count):Q"),
    alt.Color("series:N").scale(scheme="category20b"),
)

Нормализованное накопление

stack="normalize" в канале кодирования создаёт нормализованные области с накоплением. Так удобно сравнивать долю безработных в разных отраслях:

import altair as alt
from altair.datasets import data

source = data.unemployment_across_industries.url

alt.Chart(source).mark_area().encode(
    alt.X("yearmonth(date):T").axis(format="%Y", domain=False, tickSize=0),
    alt.Y("sum(count):Q").stack("normalize"),
    alt.Color("series:N").scale(scheme="category20b"),
)

Потоковая диаграмма

stack="center" сдвигает базовую линию накопления к центру и создаёт потоковую диаграмму. Метод interactive добавляет масштабирование и перемещение шкалы x:

import altair as alt
from altair.datasets import data

source = data.unemployment_across_industries.url

alt.Chart(source).mark_area().encode(
    alt.X("yearmonth(date):T").axis(format="%Y", domain=False, tickSize=0),
    alt.Y("sum(count):Q").stack("center").axis(None),
    alt.Color("series:N").scale(scheme="category20b"),
).interactive()

Область между границами

Указание X2 или Y2 для количественной оси создаёт область между двумя границами. Например, покажем минимальные и максимальные температуры во времени с агрегированием по monthdate:

import altair as alt
from altair.datasets import data

source = data.seattle_weather()

alt.Chart(source).mark_area(opacity=0.7).encode(
    alt.X("monthdate(date):T").title("Date"),
    alt.Y("mean(temp_max):Q").title("Daily Temperature Range (C)"),
    alt.Y2("mean(temp_min):Q"),
).properties(width=600, height=300)