DC.js条形图条在画笔上消失,日期范围问题的总量消失
我正在研究几个简单的DC,D3和Crossfilter数据可视化图表。 经过多次修补和查看不同的例子,我仍然无法弄清楚为什么当我将笔刷移动到条形图上时,条形图上的条形图会消失。
我正在努力的另一件事是试图创建第二个图表,并将其与第一个图表中选择的日期范围关联起来。 显然需要解决第一个问题,但我知道我的代码还存在其他问题。 我希望第二个图表成为一个条形图,其中单条显示第一个图表中所选日期的“h”字段的总数。 即使在画笔移动之前,它现在只显示三个画面,所以只给它提供h维度,而我在日期维度上创建的组是不够的。
JSFiddle:https://jsfiddle.net/schins02/bLkgLuhg/
rData.forEach(function(d, i) {
d.date = d3.time.format("%Y-%m-%d").parse(d.date);
});
var playerData = crossfilter(rData);
//dimensions and groups
var dateDim = playerData.dimension(function(d) {
return d.date;
});
var abDim = playerData.dimension(function(d) {
return d.ab
});
var hitDim = playerData.dimension(function(d) {
return d.h
});
var absGroupByDate = dateDim.group().reduceSum(function(d) {
return d.ab
});
var hitsGroupByDate = dateDim.group().reduceSum(function(d) {
return d.h
});
var x_domain = d3.extent(rData, function(d) {
return d.date;
});
var x_scale = d3.time.scale();
x_scale.domain(x_domain);
var abChart = dc.barChart("#ab-bar-chart");
abChart
.width(WIDTH)
.height(HEIGHT + 30)
.x(x_scale)
.y(d3.scale.linear().domain([0, d3.max(rData, function(d) {
return d.ab
})]))
.yAxisLabel("")
.centerBar(true)
.dimension(abDim)
.alwaysUseRounding(true)
.xUnits(function() {
return 15;
})
.group(absGroupByDate);
abChart.elasticX(true);
abChart.xAxisPadding(1);
abChart.xAxis().tickFormat(d3.time.format("%b %d")).ticks(d3.time.days, 3);
abChart.yAxis().tickFormat(d3.format("d"));
abChart.render();
abChart.on("filtered", function(chart) {
//???
//console.log(chart);
//console.log(dateDim);
//dc.redrawAll(chart.chartGroup());
//hitDim.filterRange(newDate(?) , new Date(?));
});
var hitChart = dc.barChart("#hit-bar-chart");
var totalHits = playerData.groupAll().reduceSum(function(d) {
return d.h;
}).value();
hitChart
.width(200)
.height(HEIGHT + 30)
.x(d3.scale.ordinal().domain(["Hits"]))
.xUnits(dc.units.ordinal)
.y(d3.scale.linear().domain([0, totalHits]))
.yAxisLabel("")
.centerBar(true)
.dimension(hitDim)
.brushOn(false)
.alwaysUseRounding(true)
.group(hitsGroupByDate)
hitChart.render();
任何帮助将不胜感激。
确实,crossfilter的世界模型需要一些习惯。 名称“维度”可能有些误导 - 它确实是“您想要过滤的内容”,并且构建在该维度上的任何组都不会观察其过滤器,而只会观察其他维度。
这意味着
您通常希望单个图表的组和维度相匹配,以便在过滤它时自己的数据不会被删除。 由于第一个图表显示日期,因此请继续使用dateDim
。 这样,当过滤器应用日期范围(基于组中的键)时,类型将匹配。 它也不会过滤自己。
为了得到一个能够汇总所有数据的单个条,你可以使用这个最近的答案中的技巧来创建一个交叉过滤组,所有的行为就像一个普通的组。 在这里,维度是什么并不重要,因为没有什么可以过滤。
第二部分将如下所示:
function regularize_groupAll(groupAll) {
return {
all: function() {
return [{key: 'all', value: groupAll.value()}];
}
};
}
var allHits = playerData.groupAll().reduceSum(function(d) {
return d.h;
});
var totalHits = allHits.value();
var regAllHits = regularize_groupAll(allHits);
你小提琴的叉子:https://jsfiddle.net/gordonwoodhull/sfLnoxdr/7/
链接地址: http://www.djcxy.com/p/32689.html上一篇: DC.js barchart bars disappear on brush and total amount for date range problems
下一篇: dc.js / crossfilter performance issue 12,000+ rows of CSV data