密度#
密度转换对输入数据执行一维核密度估计,并生成一个新列,其中包含估计密度的样本。
这里是一个简单的示例,展示了来自电影数据集的 IMDB 评分分布
import altair as alt
from vega_datasets import data
alt.Chart(data.movies.url).transform_density(
'IMDB_Rating',
as_=['IMDB_Rating', 'density'],
).mark_area().encode(
x="IMDB_Rating:Q",
y='density:Q',
)
密度也可以按组计算,通过指定 groupby
参数。这里我们将上述密度计算按电影类型划分
import altair as alt
from vega_datasets import data
alt.Chart(
data.movies.url,
width=120,
height=80
).transform_filter(
'isValid(datum.Major_Genre)'
).transform_density(
'IMDB_Rating',
groupby=['Major_Genre'],
as_=['IMDB_Rating', 'density'],
extent=[1, 10],
).mark_area().encode(
x="IMDB_Rating:Q",
y='density:Q',
).facet(
'Major_Genre:N',
columns=4
)
转换选项#
transform_density()
方法基于 DensityTransform
类构建,该类具有以下选项
点击显示表格
属性 |
类型 |
描述 |
---|---|---|
as |
数组( |
样本值和相应密度估计的输出字段。 默认值: |
bandwidth |
|
高斯核的带宽(标准差)。如果未指定或设置为零,将使用 Scott 规则从输入数据中自动估计带宽值。 |
counts |
|
一个布尔标志,指示输出值应该是概率估计(false)还是平滑计数(true)。 默认值: |
cumulative |
|
一个布尔标志,指示是生成密度估计(false)还是累积密度估计(true)。 默认值: |
density |
执行密度估计的数据字段。 |
|
extent |
数组( |
一个 [min, max] 范围,用于采样分布。如果未指定,则范围将由密度值字段的观察最小值和最大值决定。 |
groupby |
数组( |
用于分组的数据字段。如果未指定,将使用包含所有数据对象的单个组。 |
maxsteps |
|
沿范围域采样以绘制密度的最大样本数。 默认值: |
minsteps |
|
沿范围域采样以绘制密度的最小样本数。 默认值: |
resolve |
[‘independent’, ‘shared’] |
指示如何解析多个密度的参数。如果为 默认值: |
steps |
|
沿范围域采样的精确样本数,用于绘制密度。如果指定,将覆盖 minsteps 和 maxsteps,设定精确的均匀样本数。与固定范围结合使用时可能很有用,以确保堆叠密度的样本点一致。 |