Текст — Text
Примитив text представляет каждую точку данных текстом, а не точкой.
Свойства текста
Определение text поддерживает любые стандартные свойства и следующие специальные свойства:
Нажмите, чтобы показать таблицу
| Свойство | Тип | Описание |
|---|---|---|
angle | anyOf(number, ExprRef) | Угол поворота текста в градусах. |
align | anyOf(Align, ExprRef) | Горизонтальное выравнивание текста или примитивов с диапазоном: area, bar, image, rect, rule. Значения: |
baseline | anyOf(TextBaseline, ExprRef) | Для текста — вертикальная базовая линия: |
dir | anyOf(TextDirection, ExprRef) | Направление текста: |
dx | anyOf(number, ExprRef) | Горизонтальное смещение подписи относительно точки привязки, в пикселях. Применяется после поворота свойством angle. |
dy | anyOf(number, ExprRef) | Вертикальное смещение подписи относительно точки привязки, в пикселях. Применяется после поворота свойством angle. |
ellipsis | anyOf(string, ExprRef) | Строка многоточия для текста, обрезанного по limit. По умолчанию: |
font | anyOf(string, ExprRef) | Гарнитура текста, например |
fontSize | anyOf(number, ExprRef) | Размер шрифта в пикселях. По умолчанию: |
fontStyle | anyOf(FontStyle, ExprRef) | Начертание шрифта, например |
fontWeight | anyOf(FontWeight, ExprRef) | Насыщенность шрифта: строка, например |
limit | anyOf(number, ExprRef) | Максимальная длина текстового примитива в пикселях. Текст автоматически обрезается, если его отображаемый размер превышает предел. По умолчанию: |
lineHeight | anyOf(number, ExprRef) | Высота строки в пикселях, то есть расстояние между соседними строками многострочного текста. |
radius | anyOf(number, ExprRef) | Для arc — основной внешний радиус в пикселях. Для text — радиальное смещение текста в полярных координатах от начала, заданного x и y. По умолчанию: |
text | anyOf(Text, ExprRef) | Текст-заполнитель, если канал text не указан. |
theta | anyOf(number, ExprRef) | Для arc — угловая длина дуги в радианах, если |
Примеры
Тепловая карта с текстовыми значениями
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