带抖动的条形图#
在这个图表中,我们将Major_Genre列从movies数据集中编码到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')