Python 在Altair中获得选择的和

Python 在Altair中获得选择的和,python,altair,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_selec

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

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
        )

您可以使用文本标记和显示所选内容中的值之和。例如:

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


编辑:如果您想在文本中显示选择范围,这并不完全简单,但是您可以使用一个适当的字符串和一个按名称引用选择的字符串来完成

例如:

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
brush=alt.selection(type='interval',encodings=['x'],name='sel')
chart=alt.chart(数据).mark_bar().encode(
x='dates:T',
y='costs:Q',
).添加所选内容(
刷子
)
text=alt.Chart(数据).transform\u过滤器(
刷子
).转换集合(
总额=(成本总额)'
).transform_计算(
date_range=“选择日期?月(选择日期[0])至“+月(选择日期[1]):”全部“,
text=“'Total for'+datum.date_range+':'+格式(datum.Total,.0f')”
).mark_text(
左对齐,
基线='顶部',
).编码(
x=高度值(5),
y=高度值(5),
text=alt.text('text:N'),
)
图表+文本

您可以使用文本标记和显示所选内容中的值之和。例如:

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


编辑:如果您想在文本中显示选择范围,这并不完全简单,但是您可以使用一个适当的字符串和一个按名称引用选择的字符串来完成

例如:

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
brush=alt.selection(type='interval',encodings=['x'],name='sel')
chart=alt.chart(数据).mark_bar().encode(
x='dates:T',
y='costs:Q',
).添加所选内容(
刷子
)
text=alt.Chart(数据).transform\u过滤器(
刷子
).转换集合(
总额=(成本总额)'
).transform_计算(
date_range=“选择日期?月(选择日期[0])至“+月(选择日期[1]):”全部“,
text=“'Total for'+datum.date_range+':'+格式(datum.Total,.0f')”
).mark_text(
左对齐,
基线='顶部',
).编码(
x=高度值(5),
y=高度值(5),
text=alt.text('text:N'),
)
图表+文本

太棒了,谢谢!如果我可以问一个后续问题:我可以把总数放在文本中吗,例如,“从{month1}到{month2}的总成本:{cost sum}”?这并不简单,但可以做到。见编辑。太棒了,谢谢!如果我可以问一个后续问题:我可以把总数放在文本中吗,例如,“从{month1}到{month2}的总成本:{cost sum}”?这并不简单,但可以做到。请参见编辑。