【问题标题】:How to show "missing" rows in a rowChart using crossfilter and dc.js?如何使用 crossfilter 和 dc.js 在 rowChart 中显示“缺失”行?
【发布时间】:2014-06-22 12:24:57
【问题描述】:

我正在使用类似于dc.js annotated example 中的代码:

var ndx = crossfilter(data);
...
var dayName=["0.Sun","1.Mon","2.Tue","3.Wed","4.Thu","5.Fri","6.Sat"];
var dayOfWeek = ndx.dimension(function (d) {
    var day = d.dd.getDay();
    return dayName[day];
 });
var dayOfWeekGroup = dayOfWeek.group();

var dayOfWeekChart = dc.rowChart("#day-of-week-chart");
dayOfWeekChart.width(180)
    .height(180)
    .group(dayOfWeekGroup)
    .label(function(d){return d.key.substr(2);})
    .dimension(dayOfWeek);

我遇到的问题是,我的rowChart 中只显示数据中存在的星期几,并且不能保证我的所有数据集中都会显示每一天。

这对于许多类型的类别来说都是可取的行为,但是对于简短且众所周知的列表(例如日期和月份名称)省略它们有点令人不安,我宁愿包含一个空行。

对于barChart,我可以使用.xUnits(dc.units.ordinal).x(d3.scale.ordinal.domain(dayName)) 之类的东西。

有没有办法为rowChart 做同样的事情,以便显示一周中的所有日子,无论是否存在于数据中?

根据我对crossfilter库的理解,我需要在图表级别做这个,维度是可以的。我一直在研究dc.js 1.6.0 api referenced3 scales 文档,但没有找到我想要的东西。

解决方案

基于@Gordon's answer,我添加了如下函数:

function ordinal_groups(keys, group) {
    return {
        all: function () {
            var values = {};
            group.all().forEach(function(d, i) {
                values[d.key] = d.value;
            });
            var g = [];
            keys.forEach(function(key) {
                g.push({key: key,
                        value: values[key] || 0});
            });
            return g;
        }
    };
}

如下调用它将用 0 填充任何缺失的行:

.group(ordinal_groups(dayNames, dayOfWeekGroup))

【问题讨论】:

  • 谢谢 - 这对我很有帮助。

标签: dc.js crossfilter


【解决方案1】:

实际上,我认为您最好在将组传递给 dc.js 之前确保这些组存在。

一种方法是这里描述的“假组”模式: https://github.com/dc-js/dc.js/wiki/FAQ#filter-the-data-before-its-charted

这样您可以确保每次数据更改时都会创建额外的条目。

您是说您尝试将额外的条目添加到序数域,但它们仍然没有显示在行图中,而这对条形图有效? That sounds like a bug to me. 具体来说,似乎需要将对序数域的支持添加到行图中。

【讨论】:

  • 一个“假组”看起来很有希望,我会试试的。对于 barChart,您可以显式指定域,因此那里没有问题,但是 rowChart 无法指定域(例如使用 .y() 方法),因此实际上没有其他任何地方可以添加它们...
  • 啊。你说的太对了。行图内部甚至没有使用比例尺,它只是将数据索引直接映射到 updateElements 中的 y 变换。感谢您指出问题的根源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多