javascript - d3 : how to visualize a simple 2D matrix?

标签 javascript matrix d3.js

我一直在尝试在 d3 中绑定(bind)二维数据。我想显示一个绿色方 block 矩阵。我正在构建这样的矩阵:

var size = 10;
dataset = [];
for(var y = 0; y<size; y++){
    var tempData = [size];
    for(var x = 0; x<size; x++){
        tempData[x] = 5;
    };
    dataset.push(tempData);
};

我不确定如何正确绑定(bind)数据。我有点理解迈克博斯托克的tutorial on nested selections ,但他将固定大小的矩阵绑定(bind)到已经存在的元素。我将如何使用 enter() 创建新的矩形?这就是我尝试应用教程的建议来首先绑定(bind)外部数组,然后绑定(bind)内部数组的方法。它不起作用并不奇怪,但我也不知道从这里该去哪里..

svg.selectAll("rect")
   .data(dataset)
   .selectAll("rect")
   .data(function (d,i) {return d;})
   .enter()
   .append("rect")
   .attr("x", function(d,i){
            return i*20})
   .attr("y", function(d,i){
            return i*20;})
   .attr("height", 15)
   .attr("width", 15)
   .attr("fill", "green");

最佳答案

有两个问题。首先,在第一个 .data() 之后立即有第二个 .selectAll(),这意味着您将对更新选择进行操作。这是空的,因为 DOM 中没有可以开始的元素。您需要对 Enter 选择进行操作(对于第一级,最好在此处使用 g 元素):

svg.selectAll("rect")
  .data(dataset)
  .enter()
  .append("g")
  .selectAll("rect")
  .data(function (d,i) {return d;})

其次,您将矩形沿对 Angular 线放置(相同的 x 和 y 坐标),因此即使存在正确数量的 rect 元素,您也看不到所有它们,因为它们重叠。要修复此问题,您需要将父组中的索引考虑到坐标之一(使用 secret third argument ):

.append("rect")
.attr("x", function(d,i){
        return i*20;
})
.attr("y", function(d, i, j){
        return j*20;
})

完整演示 here .

关于javascript - d3 : how to visualize a simple 2D matrix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34669502/

相关文章:

python - Numpy:旋转 M 的子矩阵 m

MATLAB 数组行排列

c - 输入零时函数循环

javascript - time.ticks 没有输出正确的日期

d3.js - 重叠 map 之间的不精确性

javascript - Mongoose 中嵌套查询执行的问题

javascript - 有一种方法可以将变量从 userdata 传递到 docker-compose 到 EC2 实例中的 nginx

javascript - 包含对象数组和字符串数组的对象

javascript - 我想使用 javascript 为引导按钮动态显示徽章编号

javascript - Chrome 应用使用 JavaScript/jQuery/AngularJS 访问外部资源