使用 Altair 生成具有已堆叠数据的未堆叠条形图

Using Altair to generate an unstacked barplot with an already stacked data

我创建了一个包含堆叠数据的 DataFrame,即总共测试了 \。

import pandas as pd
import altair as alt

df = pd.DataFrame({
  'date': ['2021-01-01', '2021-02-01', '2021-03-01'],
  'total': [10, 15, 20],
  'tested': [0, 5, 10]
})

dfm = df.melt(id_vars=['date'])

我想用 Altair 绘制堆积条形图。由于 tested 列已包含在 total 列中,我希望图表具有 total 的最大值,但结果显示总和。

alt.Chart(dfm).mark_bar().encode(
    x='date:O',
    y='value:Q',
    color='variable:O'
)

我知道我可以使用 pandas 创建一个 untested 列并使用 testeduntested 列生成图表,但我想知道我是否可以在不转换数据的情况下实现这个结果。

要创建非堆叠条形图,您可以设置 stack=False:

alt.Chart(dfm).mark_bar().encode(
    x='date:O',
    y=alt.Y('value:Q', stack=False),
    color='variable:O'
)

请注意,它始终会在顶部显示最右边的列(上图中的tested)。