如何过滤具有多个条件的值?

How can I filter values with multiple conditions?

如何根据其他列筛选具有多个条件的值?在 中,答案显示了如何使用 filter transform:

以单个条件进行过滤
{
  "data": {
    "values": [
      {"a": "A", "b": 2, "c": "red"},
      {"a": "A", "b": 7, "c": "yellow"},
      {"a": "A", "b": 4, "c": "blue"},
      {"a": "B", "b": 1, "c": "blue"},
      {"a": "B", "b": 2, "c": "red"}
    ]
  },
  "transform": [{"filter": "datum.c == 'red'"}],
  "mark": "bar",
  "encoding": {
    "x": {"field": "a", "type": "nominal"},
    "y": {"aggregate": "average", "field": "b", "type": "quantitative"}
  }
}

我想过滤 c 列中所有带有“红色”和“蓝色”的值,所以没有“黄色”。我相信需要使用 OneOf 逻辑运算符,如 vega documentation 所示,但我不知道如何使用。我将 transform 部分更改为:

"transform": [{"field": "c", "oneOf": ["red", "blue"]}],

但这在 online vega editor 中不起作用。

filter 转换可以用作字符串和对象。使用字符串类型时,您可以将条件设​​为:

"transform": [{"filter": "datum.c == 'red' || datum.c == 'blue'"}],

并且在使用对象时可以是:

"transform": [{"filter": {"field": "c", "oneOf": ["red", "blue"]}}],

根据复杂程度,您可以使用这两种类型中的任何一种。要回答您的问题,请参考以下代码或参考 editor:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {
    "values": [
      {"a": "A", "b": 2, "c": "red"},
      {"a": "A", "b": 7, "c": "yellow"},
      {"a": "A", "b": 4, "c": "blue"},
      {"a": "B", "b": 1, "c": "blue"},
      {"a": "B", "b": 2, "c": "red"}
    ]
  },
  "transform": [{"filter": {"field": "c", "oneOf": ["red", "blue"]}}],
  "mark": "bar",
  "encoding": {
    "x": {"field": "a", "type": "nominal"},
    "y": {"aggregate": "average", "field": "b", "type": "quantitative"}
  }
}