Полосовая диаграмма со случайным смещением

Столбец Major Genre набора movies кодируется каналом y. В обычном представлении точки сильно перекрывались бы, затрудняя сравнение частот разных значений. Для решения используется канал yOffset со случайным смещением, или jitter. Слева смещение имеет нормальное распределение, справа — равномерное.

import altair as alt
from altair.datasets import data

source = data.movies.url

gaussian_jitter = alt.Chart(source, title='Normally distributed jitter').mark_circle(size=8).encode(
    y="Major Genre:N",
    x="IMDB Rating:Q",
    yOffset="jitter:Q",
    color=alt.Color('Major Genre:N').legend(None)
).transform_calculate(
    # Generate Gaussian jitter with a Box-Muller transform
    jitter="sqrt(-2*log(random()))*cos(2*PI*random())"
)

uniform_jitter = gaussian_jitter.transform_calculate(
    # Generate uniform jitter
    jitter='random()'
).encode(
    alt.Y('Major Genre:N').axis(None)
).properties(
    title='Uniformly distributed jitter'
)

(gaussian_jitter | uniform_jitter).resolve_scale(yOffset='independent')

Подробнее в связанных разделах документации: