【问题标题】:altair dynamic combination of selection conditionsaltair动态组合选择条件
【发布时间】:2020-08-13 12:35:09
【问题描述】:

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

我想要完成的事情是我想要预先选择我想要可视化的类别(这是在创建 altair 图表之前完成的)。然后将这些类别添加为 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]
)

但这不起作用。

我似乎无法弄清楚如何使用 altair 实现这样的目标。有人可以提供一个关于如何使用复选框来执行此操作的示例,或者帮助我找到另一种方法来实现相同的目的吗?

TLDR:我基本上想支持数量可变的类别,同时也支持创建类别组合的能力。
编辑:试图更清楚地说明我想用代码实现什么。

【问题讨论】:

    标签: python charts data-visualization visualization altair


    【解决方案1】:

    听起来你想在不知道sel的长度的情况下写这个等价物:

    sel = [alt.selection_single() for i in range(3)]
    combined = sel[0] & sel[1] & sel[2]
    

    对于一般的 Python 运算符,您可以这样做:

    import operator
    import functools
    combined = functools.reduce(operator.and_, sel)
    

    在 Altair 中,您也可以直接构建生成的 Vega-Lite 规范:

    combined = {"selection": {"and": [s.name for s in sel]}}
    

    在 Altair 图表中使用时,这三种方法中的任何一种都应该产生相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 2019-10-04
      • 1970-01-01
      • 2023-04-09
      • 2017-09-13
      相关资源
      最近更新 更多