Текст — Text

Примитив text представляет каждую точку данных текстом, а не точкой.

Свойства текста

Определение text поддерживает любые стандартные свойства и следующие специальные свойства:

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

Угол поворота текста в градусах.

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"; ссылки на выражения для них не поддерживаются.

diranyOf(TextDirection, ExprRef)

Направление текста: "ltr" — слева направо, "rtl" — справа налево. Определяет, с какой стороны текст обрезается по параметру limit. По умолчанию: "ltr".

dxanyOf(number, ExprRef)

Горизонтальное смещение подписи относительно точки привязки, в пикселях. Применяется после поворота свойством angle.

dyanyOf(number, ExprRef)

Вертикальное смещение подписи относительно точки привязки, в пикселях. Применяется после поворота свойством angle.

ellipsisanyOf(string, ExprRef)

Строка многоточия для текста, обрезанного по limit. По умолчанию: "…".

fontanyOf(string, ExprRef)

Гарнитура текста, например "Helvetica Neue".

fontSizeanyOf(number, ExprRef)

Размер шрифта в пикселях. По умолчанию: 11.

fontStyleanyOf(FontStyle, ExprRef)

Начертание шрифта, например "italic".

fontWeightanyOf(FontWeight, ExprRef)

Насыщенность шрифта: строка, например "bold" или "normal", либо число 100, 200, 300, …, 900. normal соответствует 400, bold — 700.

limitanyOf(number, ExprRef)

Максимальная длина текстового примитива в пикселях. Текст автоматически обрезается, если его отображаемый размер превышает предел. По умолчанию: 0, без ограничения.

lineHeightanyOf(number, ExprRef)

Высота строки в пикселях, то есть расстояние между соседними строками многострочного текста.

radiusanyOf(number, ExprRef)

Для arc — основной внешний радиус в пикселях. Для text — радиальное смещение текста в полярных координатах от начала, заданного x и y. По умолчанию: min(plot_width, plot_height)/2.

textanyOf(Text, ExprRef)

Текст-заполнитель, если канал text не указан.

thetaanyOf(number, ExprRef)

Для arc — угловая длина дуги в радианах, если theta2 не задан, иначе начальный угол. Ноль направлен вверх, или на север; положительные значения идут по часовой стрелке. Для text — угол в полярных координатах, в радианах.

Примеры

Тепловая карта с текстовыми значениями

import altair as alt
from altair.datasets import data

source = data.cars()

base = alt.Chart(source).transform_aggregate(
    num_cars="count()",
    groupby=["Origin", "Cylinders"],
).encode(
    alt.X("Cylinders:O").scale(paddingInner=0),
    alt.Y("Origin:O").scale(paddingInner=0),
)

heatmap = base.mark_rect().encode(
    alt.Color("num_cars:Q")
        .scale(scheme="viridis")
        .legend(direction="horizontal")
)

predicate = alt.datum.num_cars > 100
text = base.mark_text(baseline="middle").encode(
    text="num_cars:Q",
    color=alt.when(predicate).then(alt.value("black")).otherwise(alt.value("white")),
)

heatmap + text

Подписи

text может служить подписью других примитивов. В определении задаются смещение dx или dy, выравнивание align и базовая линия baseline:

import altair as alt
import pandas as pd

source = pd.DataFrame({
    "a": ["A", "B", "C"],
    "b": [28, 55, 43]
})

bar = alt.Chart(source).mark_bar().encode(
    y="a:N",
    x=alt.X("b:Q").scale(domain=[0, 60])
)
text = bar.mark_text(
    align="left",
    baseline="middle",
    dx=3
).encode(text="b")

bar + text

Положение подписей по условию

По умолчанию подписи размещаются выше значения или справа от него. При отрицательных значениях это может приводить к наложению на столбец. Положение можно задать через выражения:

import altair as alt
import pandas as pd

source = pd.DataFrame({
    "a": ["A", "B", "C"],
    "b": [28, -5, 10]
})

bar = alt.Chart(source).mark_bar().encode(
    y="a:N",
    x=alt.X("b:Q").scale(domain=[-10, 35])
)

text_conditioned = bar.mark_text(
    align="left",
    baseline="middle",
    dx=alt.expr(alt.expr.if_(alt.datum.b >= 0, 10, -20))
).encode(text="b")

bar + text_conditioned

Диаграмма рассеяния с текстом

Поле в канале text задаёт текст примитива. Например, вместо точек покажем первые буквы региона происхождения автомобилей на цветной диаграмме рассеяния:

import altair as alt
from altair.datasets import data
from altair import datum

source = data.cars()

alt.Chart(source).mark_text().encode(
    x="Horsepower:Q",
    y="Miles_per_Gallon:Q",
    color="Origin:N",
    text="Origin[0]:N",
)

Географический текст

Сопоставление координат каналам longitude и latitude выбранной проекции позволяет точно размещать подписи. Здесь названия столиц штатов США показаны в их географических положениях:

import altair as alt
from altair.datasets import data

states = alt.topo_feature(data.us_10m.url, feature="states")

source = data.us_state_capitals()

background = alt.Chart(states).mark_geoshape(
    fill="lightgray",
    stroke="white",
).properties(
    width=750,
    height=500,
).project("albersUsa")

line = alt.Chart(source).mark_text(dy=-10).encode(
    latitude="lat:Q",
    longitude="lon:Q",
    text="city:N"
)

point = alt.Chart(source).mark_circle().encode(
    latitude="lat:Q",
    longitude="lon:Q",
    color=alt.value("orange"),
)

background + line + point