crossfilter是否支持嵌套维度?

时间:2017-04-17 15:44:53

标签: d3.js dc.js crossfilter

我正在整理dc.js中一些公共健康数据的交互式可视化。我希望用户能够使用饼图过滤一组变量(例如医疗机构的类型,区域)。在这些过滤器下面,在行图中,我想显示十个具有最多患者的设施。

我遇到的问题是,行图仅显示整个数据集的前十个结果。理想情况下,我会根据设施类型/区域进行过滤,然后查看数据该子部分的前十个条形图。现在,我只看到整体前十名中的一两个小节。

我的问题是DC.js和crossfilter是否支持嵌套维度,我可以在第一维度(按设施类型/区域)过滤并显示第二维度的数据。由于其他原因,这也可能是错误的做法。

我可以尝试组合一个jsfiddle来展示我目前的情况。但是,有关嵌套维度是否存在(或适用于这种情况)的信息也会有所帮助。

1 个答案:

答案 0 :(得分:1)

你绝对可以叠加尺寸。首先,创建维度A并按其过滤。然后你可以扼杀其他尺寸并叠加它们。

以下是工作代码的快速示例,该代码按“价格”维度创建和过滤,然后具有“restaurantNames”维度,然后是“星星”维度。

指向working code is here

的链接
  var xf;

  function drawMarkerSelect(data) {
      xf = crossfilter(data);
      var groupname = "marker-select";

      var priceDimension = xf.dimension(function(d) {
                return d.price_range;
      }).filter(function (d) {
            //...
        });

      var restaurantNames  = xf.dimension(function(d) {
                return d.name;
      });
      var restaurantsGroup = restaurantNames.group().reduce(
            //  .... 
      );

      marker = dc_leaflet.markerChart("#container .map", groupname) 
         // ........
       ;
        var stars = xf.dimension(function(d) {
                return d.stars;
        });
        var starsGroup = stars.group().reduceCount();
        var pie = dc.pieChart("#container .pie",groupname)
                  .dimension(stars)
                  .group(starsGroup)
                  // ... 
                  });
      dc.renderAll(groupname);
  }