javascript - D3 天/小时热图 - 嵌套数据问题

标签 javascript d3.js

我正在尝试创建日/小时热图,如下例所示:http://bl.ocks.org/tjdecke/5558084

我正在尝试创建一个与示例中的数据集类似的数据集,如下所示:

day hour    value
1   1   16 
1   2   20
1   3   0
...

我首先使用 d3.histogram 按小时对数据进行分类,然后使用 d3.nest 按星期几和小时进行嵌套:

var nested_data = d3.nest()
                        .key(function(d) { return formatTimeDay(new Date(d.x0)); })
                        .key(function(d) { return  formatTimeHour(new Date(d.x0)); })
                        .rollup(function(v) { return d3.mean(v, function(d) { return d.length; }); })
                        .object(bins);

这给了我一个数据集,显示 - day: {hour: value, hour2: ...}:

1: {"00": 0.4, "01": 1.4, ..
2: {"00": 0.2, "01": 4.3..

现在我需要绘制矩形,在示例中是这样完成的:

  var cards = svg.selectAll(".hour")
          .data(data, function(d) {return d.day+':'+d.hour;});

      cards.enter().append("rect")
          .attr("x", function(d) { return (d.hour - 1) * gridSize; })
          .attr("y", function(d) { return (d.day - 1) * gridSize; })
          .attr("rx", 4)
          .attr("ry", 4)
          .attr("class", "hour bordered")
          .attr("width", gridSize)
          .attr("height", gridSize)
          .style("fill", colors[0]);

但我不知道如何使用嵌套数据来执行此操作,或者如何重组它以使其看起来像示例中的数据。

最佳答案

var flatList = [];

for (var day in nested_data) {
    var day_data = nested_data[day];
    for (var hour in day_data) {
        flatList.push( { day: +day, hour: +hour, value: day_data[hour]} );
    }
}

关于javascript - D3 天/小时热图 - 嵌套数据问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52315589/

相关文章:

javascript - AJAX 请求完成后,JS 函数不起作用(可能是 $(this) 问题)

javascript - 如何在d3 v4中的scaleTime中使用rangeRound?

javascript - D3 将图像附加到表头的方法

javascript - 如何使用 d3.js 更改鼠标悬停时的图像

javascript - 错误无法读取未定义的属性 'updaterCacheDirName'

javascript - 类型 `function` 的无效 prop `boolean`

javascript - 附加对象而不是文本?

javascript - 多个文件上传不起作用(这里需要 JavaScript 吗?)

javascript - 使用 D3 力模拟作为纯函数

javascript - dagre/dagre-d3/d3.js 的悬停效果