我最近开始学习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
,但无济于事。我认为问题在于我如何处理尺寸,但到目前为止我无法获得所需的结果。
如果有人能指出我正确的方向,那就太棒了!谢谢!
答案 0 :(得分:0)
我最终诉诸.on("preRedraw")
听众如下:
.on("preRedraw", function(){
CRS.dimension.hourly.filterAll();
})
我不确定这是否是最佳解决方案,但似乎可以解决这个问题!