javascript - 使用 d3.js 的六 Angular 网格

标签 javascript d3.js

我目前正在尝试使用 d3.js 创建一个六 Angular 网格和 hexbin plugin对于d3.js .我遇到的问题是我的网格中总是有空六边形或整行空行,而不是所有六边形都很好。

有什么办法解决这个问题吗?

My code :

var margin = {
    top: 80,
    right: 20,
    bottom: 50,
    left: 80
},
width = $(window).width() - margin.left - margin.right,
height = $(window).height() - 28 - margin.top - margin.bottom;

var points = [];
for (var i = 0; i < 8; i++) {
    for (var j = 0; j < 12; j++) {
        points.push([Math.floor(width * j / 12), Math.floor(height * i / 8)]);
    }
}

var hexbin = d3.hexbin()
    .size([width, height])
    .radius((width / 12) / 2);

var svg = d3.select($("#grid").get(0)).append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
    .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

svg.append("g")
    .selectAll(".hexagon")
    .data(hexbin(points))
    .enter().append("path")
    .attr("class", "hexagon")
    .attr("d", function (d) {
    return hexbin.hexagon();
})
    .attr("transform", function (d) {
    return "translate(" + d.x + "," + d.y + ")";
})
    .attr("stroke", "#fff")
    .attr("stroke-width", "2px")
    .style("fill", function (d) {
    return "#dcdcdc"; //color(d.length); 
});

最佳答案

更改您的点数据,以便在添加六边形时,平移不会将它们向右推太远的六边形或向下推太远的一行:

像这样:

var points = [];
for (var i = 0; i < 8; i++) {
    for (var j = 0; j < 12; j++) {
        points.push([Math.floor(width * j / 14), Math.floor(height * i / 11)]);
    }
}

关于javascript - 使用 d3.js 的六 Angular 网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14600705/

相关文章:

javascript - 获取所选文本的开头和结尾的字符偏移量

JavaScript:goto 语句

javascript - 为什么我有一个未定义的范围? Angular

javascript - Codewar 挑战 JavaScript

javascript - 谷歌地图的自定义信息窗口?

javascript - 重新绘制 D3/SVG 图表以进行打印

plugins - 如何制作D3插件?

javascript - 使用 d3.layout.stack() 从图层访问自定义坐标

javascript - D3.js 颜色函数每个仪表部分

javascript - 如何使用 React 正确实现 d3 svg click?