我最近开始学习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/