Prefixing, postfixing and multiline text in Vega Altair charts
Published on 3rd November 2025 under Python, Vega-Altair
Vega Altair allows to create custom text labels, which can enrich charts with static text-based information. Below is a python example that creates boxplot chart with distribution of engine displacement per each cyclinder count groups and adds text marks summarizing median and mean values of individual distributions.
import altair as alt
from vega_datasets import data
# take cars dataset
cars = data.cars()
# create chart showing distribution of engine displacement based on cylinders count
chart = (
alt.Chart(cars)
.mark_boxplot(extent="min-max", orient="horizontal")
.encode(
alt.X("Displacement"),
alt.Y("Cylinders")
)
)
# create text labels for each cylinder count group
text = (
alt.Chart(cars)
.mark_text(
# set text alignment for better readibility
align="left",
baseline="middle",
dx=10,
dy=-5
)
.encode(
# set starting text position for each distribution
# text will start at the end of Displacement distribtuion on X-axis
alt.X("max(Displacement)"),
# and for each cylinder count on Y-axis
alt.Y("Cylinders"),
# define text label
alt.Text("label:N")
)
.transform_joinaggregate(
# calculate median values
median = "median(Displacement):Q",
# calculate mean values
mean = "mean(Displacement):Q",
# we want to show the distribution of displacement for each cylinder count group
groupby = ["Cylinders"]
)
.transform_calculate(
# calculate label values to consist of median and mean data
# mean value is rounded to 2 decimal places
label = "['Median: ' + datum.median, 'Mean: ' + round(datum.mean * 100) / 100]"
)
)
# plot chart and text
chart + text
