Estoy tratando de crear un gráfico D3 que utilizará tanto estadísticas de resumen (mínimo y máximo) como datos no resumidos.
Tengo un CSV que contiene un código de trabajo (que contiene duplicados) y un salario a la media que es un decimal. Quiero calcular el mínimo y el máximo por código de trabajo.
Estoy recibiendo el error grouped is not a function . Estoy tratando de consola. registrar el máximo para el código de trabajo 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); });Descargo de responsabilidad: en el momento de escribir este artículo, la versión actual de d3 es la versión 7.6.1.
map devuelve una matriz, pero intenta acceder a ella como una función, es decir, con paréntesis.
Además: d3.nest ha quedado obsoleto en la versión 6 de d3 , que también se indica en los documentos :
Aviso de obsolescencia: use las clases Map, Set y Object integradas de JavaScript en lugar de los métodos correspondientes de d3-collection. Use el grupo y resumen de matriz d3 en lugar del nido de colección d3.
Pero: No hay necesidad de todas esas llamadas. Todo lo que necesita es d3.rollup .
d3.rollup(iterable, reduce, ...keys)Agrupa y reduce el iterable de valores especificado en un InternMap de clave a valor.
Esto debería funcionar (una vez que haya almacenado sus datos en los data variables):
// ... 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)