【问题标题】:Select empty bar in altair在 altair 中选择空栏
【发布时间】:2021-06-18 06:58:49
【问题描述】:

是否可以使用 altair 在图表中选择一个空条?

例如:

selection = alt.selection_single(fields=['x'])

ch1 = alt.Chart(ds2).mark_bar().encode(
x='y:Q',
y='x:O',
color=alt.condition(
    selection, 
    alt.value('#011B56'), 
    alt.value('lightgray'))

).add_selection(selection).properties(height=200)

在这里您可以看到,现在选择了第三条(从上方开始)。我希望能够选择第二个并在另一个图表中进一步进行其他计算。但是如果我现在点击,那将被识别为我点击了图表的空闲空间。另一方面,这会触发选择清除事件。

有没有办法选择一个空栏?

谢谢!

【问题讨论】:

    标签: altair vega-lite vega


    【解决方案1】:

    我创建了一个 vega-lite 示例,即使没有可见的条形图,您也可以在 y 轴上进行选择。创建一个 x 轴覆盖整个条形比例的层,并使用opacity: 0 使这些条形对该层透明。由于第二层的不透明度不可见,您仍然可以在 y 轴的空白空间上执行选择。下面是sn-p和editor

    {
      "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
      "width": "container",
      "height": 250,
      "data": {
        "values": [
          {"Origin": "USA", "value": 100},
          {"Origin": "Japan", "value": 0},
          {"Origin": "Europe", "value": 50},
          {"Origin": "India", "value": 100}
        ]
      },
      "layer": [
        {
          "mark": "bar",
          "encoding": {
            "y": {"field": "Origin"},
            "x": {"field": "value", "type": "quantitative"}
          }
        },
        {
          "params": [
            {
              "select": {"type": "point", "fields": ["Origin"]},
              "name": "mySelection"
            }
          ],
          "transform": [{"calculate": "1", "as": "barSel"}],
          "mark": {"type": "bar", "opacity": 0},
          "encoding": {
            "y": {"field": "Origin"},
            "x": {
              "field": "barSel",
              "type": "quantitative",
              "scale": {"domain": [0, 1]},
              "axis": null
            }
          }
        }
      ],
      "resolve": {"scale": {"x": "independent"}, "axis": {"x": "independent"}}
    }
    

    【讨论】:

    • 感谢您的回答。按照您的示例,我在 altair 中创建了一个空图表并将其添加到布局中。您能否在回答中添加以下代码:'alt.Chart(ds2).mark_bar(opacity=0).encode(y='x:O').add_selection(selection)'?
    • 您可以编辑我的答案并添加它,因为我没有使用过 altair,所以我的答案是使用 vega-lite。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2022-07-21
    • 2020-08-30
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多