转换 Vega 数据集以计算和使用 min/max 范围
Transforming Vega dataset to calculate and use min/max range
我有一个数据集,其中有一列名为 pval
。我想从该列中获取最小值和最大值并将其放入数组中。
我有以下 transform
数组,其中包含一个 formula
表达式:
transform = [{
type: 'formula',
expr: `[min(datum['pval']), max(datum['pval'])]`,
as: 'pvalDomain'
}]
这里的想法是 return 一个名为 pvalDomain
的双值数组,其中包含 pval
列中值的最小值和最大值。
在绘图规范的 encoding
中,我有一个 y.scale.domain
属性 当前使用预定义数组:
encoding: {
y: {
field: "pval",
type: "quantitative",
scale: {
domain: [7e-5, 1e-9],
type: "log"
},
...
},
...
}
如果我将 y.scale.domain
的值替换为 pvalDomain
:
encoding: {
y: {
field: "pval",
type: "quantitative",
scale: {
domain: "pvalDomain",
type: "log"
},
...
},
...
}
我收到以下错误:TypeError: n.every is not a function
。
使用通过 transform
构建的最小-最大范围数组的正确方法是什么?或者有不同的方法来计算这个范围吗?
一种方法是在编码中使用 zero: false
,例如:
encoding: {
y: {
field: "pval",
type: "quantitative",
scale: {
zero: false,
type: "log"
},
...
},
...
}
这似乎无法控制填充。另一种方法是使用 d3
或类似的方法来构建域:
function paddedLogarithmicDomainForPValues(table, padding) {
const rawPValues = d3.tsvParse(table, d3.autoType).map((d) => +d['pval']);
return [d3.min(rawPValues) / padding, d3.max(rawPValues) * padding];
}
然后在编码中使用结果,指定一个合理的填充值来品尝:
encoding: {
y: {
field: "pval",
type: "quantitative",
scale: {
domain: paddedLogarithmicDomainForPValues(table, 1.5),
type: "log"
},
...
},
...
}
我有一个数据集,其中有一列名为 pval
。我想从该列中获取最小值和最大值并将其放入数组中。
我有以下 transform
数组,其中包含一个 formula
表达式:
transform = [{
type: 'formula',
expr: `[min(datum['pval']), max(datum['pval'])]`,
as: 'pvalDomain'
}]
这里的想法是 return 一个名为 pvalDomain
的双值数组,其中包含 pval
列中值的最小值和最大值。
在绘图规范的 encoding
中,我有一个 y.scale.domain
属性 当前使用预定义数组:
encoding: {
y: {
field: "pval",
type: "quantitative",
scale: {
domain: [7e-5, 1e-9],
type: "log"
},
...
},
...
}
如果我将 y.scale.domain
的值替换为 pvalDomain
:
encoding: {
y: {
field: "pval",
type: "quantitative",
scale: {
domain: "pvalDomain",
type: "log"
},
...
},
...
}
我收到以下错误:TypeError: n.every is not a function
。
使用通过 transform
构建的最小-最大范围数组的正确方法是什么?或者有不同的方法来计算这个范围吗?
一种方法是在编码中使用 zero: false
,例如:
encoding: {
y: {
field: "pval",
type: "quantitative",
scale: {
zero: false,
type: "log"
},
...
},
...
}
这似乎无法控制填充。另一种方法是使用 d3
或类似的方法来构建域:
function paddedLogarithmicDomainForPValues(table, padding) {
const rawPValues = d3.tsvParse(table, d3.autoType).map((d) => +d['pval']);
return [d3.min(rawPValues) / padding, d3.max(rawPValues) * padding];
}
然后在编码中使用结果,指定一个合理的填充值来品尝:
encoding: {
y: {
field: "pval",
type: "quantitative",
scale: {
domain: paddedLogarithmicDomainForPValues(table, 1.5),
type: "log"
},
...
},
...
}