Как фильтровать с помощью кроссфильтра в D3 - PullRequest
1 голос
/ 22 октября 2019

Я пытаюсь отфильтровать свой набор данных, используя crossfilter, но безуспешно (полный результат возвращается в моем filterType var). Похоже, мой код соответствует встроенным аналогичным примерам в Интернете, но я должен упустить что-то очевидноеДанные для сна моего новорожденного, следовательно, это может способствовать моей смерти.

Может ли кто-нибудь просветить меня о моем недосмотре?

//Load sample sleep data
var dataset = [
  {day: 1, type: 'day', totalSleep: 8},
  {day: 1, type: 'night', totalSleep: 7},
  {day: 2, type: 'day',totalSleep: 8},
  {day: 2, type: 'night', totalSleep: 7}
];

//Crossfilter data
var cf = crossfilter(dataset);

//Create type dimension
var typeDim = cf.dimension(function(d) {return d.type});

//Reduce type by sleep
var sleepByType = typeDim.group().reduceSum(item => item.totalSleep);

//Display result
var allTypes = sleepByType.all();
console.log('All types:');
console.log(allTypes);

//Filter on type
typeDim.filter('day');

//Filtered result
var filterTypes = sleepByType.all();
console.log('Filtered types:');
console.log(filterTypes);


1 Ответ

0 голосов
/ 23 октября 2019

По умолчанию группа не соблюдает фильтры своего собственного измерения .

Это происходит потому, что обычно вы не хотите, чтобы диаграмма отфильтровывала свои собственные данные. Например, за исключением редких случаев, если вы чистите область оси x линейного графика, вы не хотите, чтобы линия вне кисти падала до нуля.

Если вы создадите другое измерение наи отфильтруйте это, вы увидите эффект на sleepByType:

var typeDim2 = cf.dimension(function(d) {return d.type});
typeDim2.filter('day');
...