带抖动的散点图#
在此图表中,我们将 movies
数据集中的 Major_Genre
列编码到 y
通道。在该数据的默认表示中,由于重叠太多,很难衡量不同值出现的相对频率。为了解决这个问题,我们使用 yOffset
通道来加入随机偏移(抖动)。该示例显示了两次,左侧使用正态分布的抖动,右侧使用均匀分布的抖动。
import altair as alt
from vega_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')
import altair as alt
from vega_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(
y=alt.Y('Major_Genre:N', axis=None)
).properties(
title='Uniformly distributed jitter'
)
(gaussian_jitter | uniform_jitter).resolve_scale(yOffset='independent')