我正在尝试创建一个D3图表,它将同时利用汇总统计数据(最小和最大)以及未汇总的数据。
我有一个CSV,它包含一个作业代码(包含重复的)和一个salaryToMedian,它是十进制的。我想通过作业代码来计算最小和最大。
我收到了错误grouped is not a function。我正在尝试console.log最大的职务代码1000。
d3.csv("http://127.0.0.1:8887/myData.csv").then(function(data){
var grouped = d3.nest()
.key(function(d) { return d.jobCode; })
.rollup(function(v) {
return {
jobCodeMax: d3.max(v, function(d) { return d.salaryToMedian; }),
jobCodeMax: d3.min(v, function(d) { return d.salaryToMedian; }),
values: v
};
})
.entries(data)
.map(function(d) {
return {
JobCode: d.key,
jobCodeMax: d.value.jobCodeMax,
jobCodeMin: d.value.jobCodeMin
};
});
console.log(grouped(1000).jobCodeMax);
});发布于 2022-08-05 08:06:15
免责声明:在编写本报告时,d3的当前版本是7.6.1版本。
map返回一个数组,但是您尝试像函数一样访问它,即使用括号。
还有:d3 . been在d3版本6中已被废弃,也被声明为在医生里
废弃注意:使用JavaScript的内置Map、Set和对象类,而不是d3-集合的相应方法。使用d3数组的组和汇总代替d3集合的嵌套。
但是:没必要打这些电话。你只需要d3.rollup。
d3.rollup(iterable, reduce, ...keys)分组,并将指定的可迭代值从键降到值,并将其归为InternMap。
这应该可以做到这一点(一旦您将数据存储在变量data中):
// ... get data into variable data ...
const keyFn = d => d.jobCode
const valueFn = d => d.salaryToMedian
const summaryReducer = function(values) {
return {
key: keyFn(values[0]), // if you want to also store the key in the summary
max: d3.max(values, valueFn),
min: d3.min(values, valueFn),
/* any other summarization you want based on values */
values: values
}
}
const grouped = d3.rollup(data, summaryReducer, keyFn) // all you need is d3.rollup
const job1000 = grouped.get(1000)我创建了ObeservableHQ上的游乐场示例。
https://stackoverflow.com/questions/73228628
复制相似问题