【问题标题】:Does crossfilter supported nested dimensions?交叉过滤器是否支持嵌套维度?
【发布时间】:2017-04-17 15:44:53
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您所描述的应该有效。它没有向您显示您选择的最佳结果的事实要么是因为您的组定义不正确(组不观察其自身维度的过滤器),要么是因为您使用 dc.js 的cap 选项的方式。如果你能分享一个 JSFiddle,我们应该可以帮助你。
  • 如果我正确理解您的问题,我不会将这些描述为“嵌套”维度——它们只是独立维度,而这正是 crossfilter 擅长的。预期的行为是,在您进行过滤之前,第二张图表将显示整体排名前十的结果;使用第一个图表进行过滤后,第二个图表的条形应该会调整大小,并且应该显示过滤结果的前 10 个。

标签: d3.js dc.js crossfilter


【解决方案1】:

您绝对可以堆叠尺寸。首先,创建维度 A 并按其过滤。然后你可以磨碎其他尺寸并将它们堆叠起来。

下面是工作代码中的一个快速示例,该代码按“价格”维度创建和过滤,然后具有“餐厅名称”维度,然后是“星”维度。

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);
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2019-07-18
    • 2012-06-28
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多