Python 牵牛星选择条件的动态组合

Python 牵牛星选择条件的动态组合,python,charts,data-visualization,visualization,altair,Python,Charts,Data Visualization,Visualization,Altair,我试图创建一个图表,通过切换复选框可以选择不同数据列的组合。但是,我并不总是希望显示所有列的复选框。因此,我想以“动态”的方式将选择添加到图表中 我想完成的事情是,我想预先选择我想要可视化的类别(这是在牛郎星图表创建之前完成的)。这些类别然后作为复选框添加到altair中。但是,我能找到的唯一方法是以硬编码方式将它们添加到下面的代码中,如“sel1[0]&sel1[1]&sel1[2]&sel1[3]&sel1[4]”: sel1 = [ alt.selection_single(

我试图创建一个图表,通过切换复选框可以选择不同数据列的组合。但是,我并不总是希望显示所有列的复选框。因此,我想以“动态”的方式将选择添加到图表中

我想完成的事情是,我想预先选择我想要可视化的类别(这是在牛郎星图表创建之前完成的)。这些类别然后作为复选框添加到altair中。但是,我能找到的唯一方法是以硬编码方式将它们添加到下面的代码中,如“sel1[0]&sel1[1]&sel1[2]&sel1[3]&sel1[4]”:

sel1 = [
  alt.selection_single(
      bind=alt.binding_checkbox(name=field),
      fields=[field],
      init={field: False}
      )
  for field in category_selection
]
transform_args = {str(col): f'toBoolean(datum.{col})' for col in category_selection}
alt.Chart(df1).transform_calculate(**transform_args).mark_point(filled=True).encode(
    x='dim1',
    y='dim2',
    opacity=alt.condition(
        sel1[0] & sel1[1] & sel1[2] & sel1[3] & sel1[4],
        alt.value(1), alt.value(0)
        )
).add_selection(
    *sel1
)
我试过这样做:

alt.Chart(df1).transform_calculate(**transform_args).mark_point(filled=True).encode(
    x='dim1',
    y='dim2',
    opacity=alt.condition(
        {'and': sel[:2]},
        alt.value(1), alt.value(0)
        )
).add_selection(
    *sel1[:2]
)
import operator
import functools
combined = functools.reduce(operator.and_, sel)
但这是行不通的

我似乎不知道如何用牵牛星实现这样的目标。有没有人能举例说明如何使用复选框来实现这一点,或者帮助我找到另一种方法来实现同样的目标

TLDR:我基本上希望支持数量可变的类别,同时也支持创建类别组合的能力。

编辑:试图更清楚地说明我试图通过代码实现的目标。

听起来你想在不知道sel的长度的情况下编写与此等效的代码:

sel = [alt.selection_single() for i in range(3)]
combined = sel[0] & sel[1] & sel[2]
对于一般的Python操作符,您可以这样做:

alt.Chart(df1).transform_calculate(**transform_args).mark_point(filled=True).encode(
    x='dim1',
    y='dim2',
    opacity=alt.condition(
        {'and': sel[:2]},
        alt.value(1), alt.value(0)
        )
).add_selection(
    *sel1[:2]
)
import operator
import functools
combined = functools.reduce(operator.and_, sel)
在Altair中,您也可以直接构建生成的Vega Lite规范:

combined = {"selection": {"and": [s.name for s in sel]}}
在牛郎星图表中使用这三种方法中的任何一种都会产生相同的结果