首页 > 解决方案 > 在 Altair 图中绘制中位数和均值

问题描述

如何在 Altair 中绘制均值和中值,以颜色编码区分?

下面是我的第一次尝试,但它不包括传说,似乎不是最优雅的方式。

import altair as alt
from vega_datasets import data

source = data.cars()

mean = alt.Chart(source).mark_line(color='red', point=True).encode(
    x='Year',
    y='mean(Miles_per_Gallon)'
)

median = alt.Chart(source).mark_line().encode(
    x='Year',
    y='median(Miles_per_Gallon)'
)

mean+median

在此处输入图像描述

标签: pythondata-visualizationaltair

解决方案


最好使用聚合变换来计算聚合,然后使用折叠变换来允许在单个编码中使用两列:

import altair as alt
from vega_datasets import data

source = data.cars()

alt.Chart(source).transform_aggregate(
    mean='mean(Miles_per_Gallon)',
    median='median(Miles_per_Gallon)',
    groupby=['Year']
).transform_fold(
    ['mean', 'median'],
    as_=['aggregate', 'value']
).mark_line().encode(
    x='Year',
    y='value:Q', 
    color='aggregate:N',
)

在此处输入图像描述


推荐阅读