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"}
}
}
我正在尝试创建一个图表来显示根据我的 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"}
}
}