我最近开始学习D3.js,Crossfilter和Dc.js,并且在遇到我无法深入解决的问题时遇到了麻烦。

我有两个折线图,一个折线图表示所有数据的概图,另一个折线图表示通过刷概图而创建的更细化的间隔放大版本。绘制的两个线图覆盖相同的间隔(请参见下文)。



顶部图形设置为以下选项:

.dimension(CRS.dimensions.hourly)
.group(CRS.groups.hourly)


和底部:

.dimension(CRS.dimensions.daily)
.group(CRS.groups.daily)


相关的初始化是

dimensions.hourly = crs.dimension(function(d){ return d.dd })
dimensions.daily = crs.dimension(function(d){ return d3.time.day(d.dd) })

groups.hourly: dimensions.hourly.group().reduce(
        function(p,v) {
            p.imps += v.imps
            p.clicks += v.clicks
            p.conversions += v.conversions
            p.cost += v.cost

            return p
        },
        function(p,v) {
            p.imps -= v.imps
            p.clicks -= v.clicks
            p.conversions -= v.conversions
            p.cost -= v.cost

            return p
        },
        function() {
            return {
                imps:0,
                clicks:0,
                conversions:0,
                cost:0
            }
        }
    ),
    groups.daily: dimensions.daily.group().order(function(d){return d}).reduce(
        function(p,v) {
            p.imps += v.imps
            p.clicks += v.clicks
            p.conversions += v.conversions
            p.cost += v.cost

            return p
        },
        function(p,v) {
            p.imps -= v.imps
            p.clicks -= v.clicks
            p.conversions -= v.conversions
            p.cost -= v.cost

            return p
        },
        function() {
            return {
                imps:0,
                clicks:0,
                conversions:0,
                cost:0
            }
        }
    )


理想情况下,刷底图不会改变,但事实并非如此。当我刷底部图形时,它会自动更新为将所有值设置为选定间隔之外的0,这是不希望的:



在时间间隔之外单击会重置顶部图形(应如此),但底部图形不会更改:



我尝试了几种解决方案以使底部图形不可变,包括将groups.daily更改为reduceSum都无济于事。我认为问题出在我如何处理尺寸上,但是到目前为止,我仍无法获得理想的结果。

如果有人可以指出我正确的方向,那就太好了!谢谢!

最佳答案

我最终采用了.on("preRedraw")侦听器,如下所示:

.on("preRedraw", function(){
    CRS.dimension.hourly.filterAll();
})


我不确定这是否是最佳解决方案,但似乎可以解决问题!

关于javascript - 意外的笔刷过滤行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25083467/

10-11 13:32