在 Altair 中获取总和

Nat*_*ate 2 python altair

我有一个时间序列的成本值,我想获得一系列选定日期的成本总和。间隔选择工作正常,但如何访问所选日期?

brush = alt.selection(type='interval', encodings=['x'])

chart = alt.Chart(forecast).mark_bar().encode(
            x='dates:T',
            y='costs:Q',
            color='type:N',
        ).add_selection(
            brush
        )
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

jak*_*vdp 6

您可以使用文本标记和过滤器变换来显示选择中的值的总和。例如:

import altair as alt
import pandas as pd
import numpy as np

data = pd.DataFrame({
    "dates": pd.date_range('2019-04-01', freq='M', periods=20),
    "costs": np.linspace(1000, 5000, 20),
})

brush = alt.selection(type='interval', encodings=['x'])

chart = alt.Chart(data).mark_bar().encode(
    x='dates:T',
    y='costs:Q',
).add_selection(
    brush
)

text = alt.Chart(data).transform_filter(brush).mark_text(
    align='left',
    baseline='top',
).encode(
    x=alt.value(5),
    y=alt.value(5),
    text=alt.Text('sum(costs):Q', format='.1f'),
)

chart + text
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


编辑:如果您想在文本中显示选择范围,这并不完全简单,但您可以使用计算转换以及适当的vega 表达式字符串来完成,该字符串通过名称引用选择。

例如:

import altair as alt
import pandas as pd
import numpy as np

data = pd.DataFrame({
    "dates": pd.date_range('2019-04-01', freq='M', periods=20),
    "costs": np.linspace(1000, 5000, 20),
})

brush = alt.selection(type='interval', encodings=['x'])

chart = alt.Chart(data).mark_bar().encode(
    x='dates:T',
    y='costs:Q',
).add_selection(
    brush
)

text = alt.Chart(data).transform_filter(brush).mark_text(
    align='left',
    baseline='top',
).encode(
    x=alt.value(5),
    y=alt.value(5),
    text=alt.Text('sum(costs):Q', format='.1f'),
)

chart + text
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 这并不简单,但可以做到。请参阅编辑。 (2认同)