dc.js seriescart不';我似乎无法使用范围图

dc.js seriescart不';我似乎无法使用范围图,dc.js,Dc.js,我一直在尝试使用带画笔的范围图过滤器来处理序列图。主图表似乎对过滤器没有响应。我以series.html为例,在JSFIDLE上添加了一个范围图 这说明了我的问题所在。有什么建议吗?注意:这个问题在dc.js v3中得到了解决,因为合成图表现在拥有画笔并正确过滤子项。以下内容仅与dc.js v2相关 我用一些难看的代码让它工作了。这里的一般问题是dc.js图表没有在实例之间共享笔刷的方法,因此通常情况下(在一个实例中有很多实例)复合笔刷的效果不是很好 特别是。对其他感兴趣的人来说,是 如果你只是

我一直在尝试使用带画笔的范围图过滤器来处理序列图。主图表似乎对过滤器没有响应。我以series.html为例,在JSFIDLE上添加了一个范围图

这说明了我的问题所在。有什么建议吗?

注意:这个问题在dc.js v3中得到了解决,因为合成图表现在拥有画笔并正确过滤子项。以下内容仅与dc.js v2相关

我用一些难看的代码让它工作了。这里的一般问题是dc.js图表没有在实例之间共享笔刷的方法,因此通常情况下(在一个实例中有很多实例)复合笔刷的效果不是很好

特别是。对其他感兴趣的人来说,是

如果你只是想做点什么,我想出了一个非常糟糕的解决办法

首先,有一件事不是解决办法。对于焦点图和范围图,您总是希望使用相同的维度和组。这是因为您不希望它们相互过滤:它们是相同数据上的视图,逻辑上共享一个笔刷

所以我做了:

overviewChart
  .dimension(runDimension)
  .group(runGroup)
某个时候,有人试图通过不过滤复合图表,而是将过滤器传递给其子级来解决复合过滤问题。因此,如果您捕获其中一个子项上的筛选事件,并执行范围图在筛选时通常会执行的操作,您将获得所需的行为

这就是它变得非常丑陋的地方:

overviewChart
  .chart(function(c,_,_,i) {
  var chart = dc.lineChart(c).interpolate('basis');
  if(i===0)
    chart.on('filtered', function (chart) {
        if (!chart.filter()) {
            dc.events.trigger(function () {
                overviewChart.focusChart().x().domain(overviewChart.focusChart().xOriginalDomain());
                overviewChart.focusChart().redraw();
            });
        } else if (!rangesEqual(chart.filter(), overviewChart.focusChart().filter())) {
            dc.events.trigger(function () {
                overviewChart.focusChart().focus(chart.filter());
            });
        }
    });
  return chart;
  })
('filtered',…)上的
内容基本上是从范围图的坐标网格图实现中复制出来的

。我把“工作”放在引号里是因为,这导致了荒谬的转变


但它还是有点用。

我一直在努力让它发挥作用,但尽管我确实做了一些工作,但我觉得它可能太粗糙了,没有什么帮助。原版是。基本上dc.js没有多个图表共享同一个选择的概念,代码中有各种半心半意的黑客试图掩盖这一点。“Sort of works”是正确的@Gordon。我在上面提到的分叉的JSFIDLE中玩了一会儿画笔;通常,当松开鼠标按钮时,focusChart上的缩放会恢复为没有过滤器(即根本没有缩放),有时会正常工作。但是,我甚至让画笔过滤到一种状态,在这种状态下,聚焦曲线上的线条根本没有画出来。这只是说,解决问题不仅仅与“荒谬”的过渡有关(尽管我也看到了这些过渡)啊,是的,我忘记了上周我尝试这个时看到的另一个问题。让我试着回忆一下那是什么,如果我能找到解决办法,请更新我的答案。这是非常糟糕的东西,在这一点上,在范围/焦点之外实现它可能更有意义,这只是一个很小的、几乎没有想到的特性。谢谢@Gordon。我也会试着调试一下。所以@Gordon,似乎chart.on('filtered')被调用用于mouseMove事件。当您将鼠标移动到JSFIDLE图表框架中时,过滤器逻辑将执行两次。第一次在没有过滤器的情况下重新绘制图表。第二次应用过滤器时(如果有)。是的,有一种反模式,其中一些dc.js组件认为有必要在设置新过滤器之前清除当前过滤器,并且他们这样做会产生很多副作用。昨天,我确定,如果没有内部修复,就无法解决这个问题(来自compositeChart)。它是安全的,不应该弄坏其他东西。今天晚些时候我会尝试测试它。
overviewChart
  .chart(function(c,_,_,i) {
  var chart = dc.lineChart(c).interpolate('basis');
  if(i===0)
    chart.on('filtered', function (chart) {
        if (!chart.filter()) {
            dc.events.trigger(function () {
                overviewChart.focusChart().x().domain(overviewChart.focusChart().xOriginalDomain());
                overviewChart.focusChart().redraw();
            });
        } else if (!rangesEqual(chart.filter(), overviewChart.focusChart().filter())) {
            dc.events.trigger(function () {
                overviewChart.focusChart().focus(chart.filter());
            });
        }
    });
  return chart;
  })