我正在尝试创建一个图形,该图形显示从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": {}
}
这就是我得到的。许多具有值的国家/地区会被忽略,并且未添加任何过滤器。
答案 0 :(得分:1)
您的数据被指定为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"}
}
}