【发布时间】:2015-12-29 15:36:39
【问题描述】:
我无法制作正确的图表,按周(和不同年份)显示数据组。
伪 SQL 会给出:
select sum ('task')
group by 'year', 'week' (and maybe later 'site')
我的数据或多或少是这样的:
{ "date" : "20150427", "week" : 18, "site" : "a" "task" : 3, }
{ "date" : "20150427", "week" : 18, "site" : "b" "task" : 4, }
{ "date" : "20150427", "week" : 18, "site" : "c" "task" : 2, }
{ "date" : "20150427", "week" : 18, "site" : "d" "task" : 3, }
{ "date" : "20150428", "week" : 18, "site" : "a" "task" : 3, }
{ "date" : "20150428", "week" : 18, "site" : "b" "task" : 3, }
{ "date" : "20150429", "week" : 18, "site" : "c" "task" : 2, }
{ "date" : "20150429", "week" : 18, "site" : "d" "task" : 3, }
{ "date" : "20140512", "week" : 20, "site" : "d" "task" : 6, }
{ "date" : "20140512", "week" : 20, "site" : "a" "task" : 6, }
{ "date" : "20140513", "week" : 20, "site" : "b" "task" : 4, }
{ "date" : "20140513", "week" : 20, "site" : "c" "task" : 1, }
{ "date" : "20140519", "week" : 21, "site" : "b" "task" : 2, }
{ "date" : "20140519", "week" : 21, "site" : "c" "task" : 1, }
{ "date" : "20140519", "week" : 21, "site" : "d" "task" : 3, }
{ "date" : "20140519", "week" : 21, "site" : "a" "task" : 1, }
{ "date" : "20140520", "week" : 21, "site" : "b" "task" : 2, }
{ "date" : "20140520", "week" : 21, "site" : "c" "task" : 3, }
{ "date" : "20140520", "week" : 21, "site" : "d" "task" : 1, }
{ "date" : "20140520", "week" : 21, "site" : "a" "task" : 1, }
这是我的数据样本,它可以有不同的年份、地点或任务
我试过了,但它不起作用,因为 barChart 累积了所有年份的一周:
d3.json("/graph", function(dataJson) {
var dataTable = dc.dataTable("#dc-table-graph");
var barChart = dc.barChart("#chart-bar-ordersperweek");
var data = dataJson;
var dateFormat = d3.time.format("%Y%m%d");
data.forEach(function (d) { d.date = dateFormat.parse(d.date); });
//dimension
var dateDim = ndx.dimension(function (d) { return d.date; });
var weekDim = ndx.dimension(function(d) {return d.week;});
//group
var orderByWD = weekDim.group().reduceSum(function (d) { return d.task; });
barChart
.width(1000).height(250)
.dimension(weekDim)
.group(orderByWD)
.x(d3.scale.ordinal().domain(d3.range(minWeek.week-1,maxWeek.week+1)))
.xUnits(dc.units.ordinal)
.y(d3.scale.linear().domain([0, 6000]))
.margins({top: 20, right: 30, bottom: 50, left: 80})
.label(function(d) { return d.value})
;
dataTable.width(800).height(800)
.dimension(dateDim)
.group( function (d) { return 'Week ' + d.week} )
.size(5000)
.columns([
function (d) { var format = d3.format('02d');
return d.date.getFullYear() +'/'+ format(d.date.getMonth()+1) + '/' + format(d.date.getDate()); },
function (d) { return d.week; },
function (d) { return d.site; },
function (d) { return d.task; }
])
.sortBy( function (d) { return Number(d.date) + d.task; })
.order(d3.descending);
dataTable.on('renderlet', function(chart){
chart.selectAll('.dc-table-group').classed('info',true);
});
dc.renderAll();
我的目标是总结同一周内发生的所有任务并将其绘制到行图上,当我选择一个星期时,用选定的星期更新数据表。
在数据表中,我如何按按周分组的站点汇总(累积)任务?
感谢您的帮助
编辑 我添加了一个 jsfiddle https://jsfiddle.net/d4qsd8wh/
【问题讨论】:
-
我认为 dataTable 基于维度而不是组运行,因此您可能需要创建一个假维度来返回要显示的记录。如果你使用 jsfiddle 或类似的东西组合了一个工作示例,我或这里的其他人可能会为你工作。
-
我只是添加它jsfiddle.net/d4qsd8wh
标签: d3.js charts dc.js crossfilter