Vega lite 计算问题

Vega lite calculate issues

我正在尝试创建一个图表来显示根据我的 csv 文件中的许多现有列计算的新列值。我知道有更多的国家,他们的得分都是 10 分(每个领域),所以总分是 50 分。

     {
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {
    "url": "https://raw.githubusercontent.com/Anika6138/InfoVis/master/arabica_data_cleaned.csv",
    "format": {
      "type": "csv"
    }
  },
  "transform": [
   {"calculate": "datum.Aroma + datum.Flavor + datum.Aftertaste + datum.Acidity + datum.Sweetness  ", "as": "Taste_Points"}
  ],
      "mark": "bar",
      "encoding": {
        "y": {
          "field": "Country_of_Origin",
          "type": "nominal"
        },
        "x": {
          "field": "Taste_Points",
          "type": "quantitative"
        }
  },
  "config": {}
}

这就是我得到的。许多具有值的国家/地区都被忽略,并且没有添加过滤器。

您的数据指定为 CSV,这意味着计算中的所有值都被解释为字符串,除非您另有说明。有两种方法可以解决这个问题;您可以在 data format 定义中添加 parse 语句:

  "data": {
    "url": "https://raw.githubusercontent.com/Anika6138/InfoVis/master/arabica_data_cleaned.csv",
    "format": {
      "type": "csv",
      "parse": {"Aroma": "number", "Flavor": "number", "Aftertaste": "number", "Acidity": "number", "Sweetness": "number"}
    }
  }

或者您可以在计算表达式中使用 parseFloat

  "transform": [
    {
      "calculate": "parseFloat(datum.Aroma) + parseFloat(datum.Flavor) + parseFloat(datum.Aftertaste) + parseFloat(datum.Acidity) + parseFloat(datum.Sweetness)",
      "as": "Taste_Points"
    }
  ]

在您的原始规范中隐式过滤字段的原因是,在许多情况下,总和的结果是一个无法解析为有效数字的串联字符串,并且从定量编码中隐式删除了 NaN 值;例如:

{
  "data": {
    "values": [
      {"y": "A", "x": 1},
      {"y": "B", "x": 2},
      {"y": "C", "x": null},
      {"y": "D", "x": null}
    ]
  },
  "mark": "bar",
  "encoding": {
    "x": {"field": "x", "type": "quantitative"},
    "y": {"field": "y", "type": "ordinal"}
  }
}