打包图

利用d3.layout.pack布局

 const width = 700, height = 500, padding = {top: 160, left: 130};
    d3.json("city.json", function (error, data) {

        const svg = d3.select("body").append("svg")
            .attr("width", width + padding.left * 2)
            .attr("height", height + padding.top * 2)
            .append("g")
            .attr("transform", `translate(${padding.left },${padding.top})`);
        const pack = d3.layout.pack()
            .size([width, height])
            .padding(19)
            .radius(20);
        const node = pack.nodes(data);
// node格式 用pack(打包布局)把数据转换成相应半径和间距的数据 然后直接用圆形绘制即可
      /*   {
            children: (12) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}],
            depth: 0,
            name: "中国",
            r: 404.29107179179675,
            value: 0,
            x: 350,
            y: 250
        }*/
        console.log(node);
        const color = d3.scale.category10();
        svg.selectAll(".circle")
            .data(node)
            .enter()
            .append("circle")
            .attr("class", "circle")
            .style("fill", function (d, i) {
                return color(i);
            })
            .style("opacity", function (d, i) {
                return d.children ? .3 : 1;
            })
            .attr("cx", function (d) {
                return d.x
            })
            .attr("cy", function (d) {
                return d.y
            })
            .attr("r", function (d) {
                return d.r
            });
        svg.selectAll(".text")
            .data(node)
            .enter()
            .append("text")
            .attr("class", "text")
            .style("stroke", "black")
            .style("font-size", "12px")
            .style("opacity", function (d, i) {
                return d.children ? 0 : 1;
            })
            .attr("x", function (d) {
                return d.x
            }).attr("y", function (d) {
            return d.y
        }).attr("dy", ".3em")
            .style("text-anchor", "middle")
            .text(d => d.name)
    });

结果


pack
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,241评论 25 709
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,713评论 1 92
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,939评论 0 17
  • 翻译自“Collection View Programming Guide for iOS” 0 关于iOS集合视...
    lakerszhy阅读 9,395评论 1 22
  • 很快中秋过去,来到大学也很快满一个月了,大姐已经因为思念家长和思念她男人躲在被子里哭泣了好多次,每次看她梨花带雨的...
    Angle果丫阅读 2,854评论 0 1

友情链接更多精彩内容