Создание гистограммы для каждой категории - PullRequest
1 голос
/ 11 июля 2020

Я пытаюсь создать гистограмму, содержащую ages в таких группах (0-10), (10-20), ...(90,100)

Набор данных выглядит следующим образом:

0: {agebracket: "20", currentstatus: "Recovered", dateannounced: "30/01/2020"}
1: {agebracket: "45", currentstatus: "Confirmed", dateannounced: "02/03/2020"}
2: {agebracket: "24", currentstatus: "Recovered", dateannounced: "02/03/2020"}
.
.
.
99: {agebracket: "58", currentstatus: "Hospitalized", dateannounced: "20/03/2020"}

Я смог создать гистограмму, но это было весь набор данных. Я не учел

"currentstatus" --> "Recovered", "Hospitalized", "Deceased"

По всему набору данных:

enter image description here

I tried to create histogram by currentstatus but it look like this: enter image description here

This is what I have tried:

var binwidth = 10;
var dim = cf.dimension(function(d) { 
    return parseInt(d.agebracket); });

var age_by_cases= dim.group().reduce(
// add
    (p, v) => {

      p[v.currentstatus] = (p[v.currentstatus] || 0) + 1;
      return p;
    },
// remove
    (p, v) => {
      p[v.currentstatus] -= 1;
      return p;
},
// init
    () => ({})
);

barChart
    .height(300)
    .width(500) //give it a width
    .dimension(dim)
    .group(age_by_cases, type)
    .elasticY(true)
    .valueAccessor(function(p) { 
        return p.value[type_c];
        // return (binwidth * Math.floor(parseInt(p.value[type_c])/binwidth)) ; 
        })  
    .x(d3.scaleLinear().domain([1,101]))
    .xUnits(dc.units.fp.precision(binwidth))

    .elasticX(true);

Line no. 170-184 and Line no. 227-243 https://blockbuilder.org/ninjakx/8e2c0b407fdb1991c9cc5e81e447ebe2

Меня это сильно ударило. Не знаю, как это решить.

1 Ответ

1 голос
/ 13 июля 2020

Обычно вы определяете биннинг в функции ключа измерения:

var dim = cf.dimension(function(d) { 
    return binwidth * Math.floor(parseInt(p.agebracket)/binwidth);
};

И затем используйте ширину бункера (или другое значение бина c) в xUnits, как оно у вас есть:

.xUnits(dc.units.fp.precision(binwidth))

Это заставляет кросс-фильтр сортировать каждую строку в ячейку со значением, округленным в меньшую сторону до binwidth, и сообщает d c. js рассчитать ширину полосы, также используя ширину ячейки.

...