首页 > 解决方案 > 如何根据其他列过滤值?

问题描述

如何在 vega-lite 中选择某些值和/或以其他列为条件的值?例如,下面我只想在“ c ”列中显示具有“ red ”的值。

{
  "data": {
    "values": [
      {"a": "A", "b": 2, "c": "red"}, 
      {"a": "A", "b": 7, "c": "red"}, 
      {"a": "A", "b": 4, "c": "blue"},
      {"a": "B", "b": 1, "c": "blue"}, 
      {"a": "B", "b": 2, "c": "red"} 
    ]
  },
  "mark": "bar",
  "encoding": {
    "x": {"field": "a", "type": "nominal"},
    "y": {"aggregate": "average", "field": "b", "type": "quantitative"}
  }
}

我之前尝试"mark": "bar",根据这个 vega github 教程添加以下代码,并使用在线 vega 编辑器,但它不过滤列b。我想我也可以用它来过滤字符串。

"transform": {
    "filter": "datum.b > 3"
  },

关于多个过滤标准的后续问题。

标签: databasefiltervega-litevega

解决方案


您可以使用过滤器转换来做到这一点:

{
  "data": {
    "values": [
      {"a": "A", "b": 2, "c": "red"},
      {"a": "A", "b": 7, "c": "red"},
      {"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"}
  }
}

推荐阅读