圆形集群图

利用集群布局(cluster)和放射对角线(svg.diagonal.radial)生成

 d3.json("city.json", function (err, data) {
        const width = 700, height = 800, padding = {top: 60, left: 30};
        const svg = d3.select("body").append("svg")
            .attr("width", width + padding.left * 2)
            .attr("height", height + padding.top * 2);
        const container = svg.append("g")
            .attr("transform", "translate(350,400)");
//        创建布局器
        const cluster = d3.layout.cluster()
        //            第一个参数用来生成范围内的x(角度)  第二个参数用来生成范围内的y(半径)
            .size([360, width / 2 - 100])
            .separation(function (a, b) {
                return (a.parent === b.parent ? 1 : 1) / a.depth;
            });
//        生成节点
        const nodes = cluster.nodes(data);
//        生成连接数组
        const links = cluster.links(nodes);
        const color = d3.scale.category20();
//        放射性对角线 需要{source:[radius,angle],target:[radius,angle]}
        const diagonal = d3.svg.diagonal.radial()
            .projection(function (d) {
                const radius = d.y,
//                把角度转换成弧长比例
                    angle = d.x / 180 * Math.PI;
                return [radius, angle];
            });
        container.selectAll(".line")
            .data(links)
            .enter()
            .append("path")
            .attr("d", diagonal)
            .attr("fill", "none")
            .attr("stroke", "purple")
            .attr("stroke-width", 2);
        const legend = container.selectAll(".legend")
            .data(nodes)
            .enter()
            .append("g")
            .attr("class", "legend")
            .attr("transform", function (d) {
                return "rotate(" + (d.x - 90) + ")" + "translate(" + d.y + ")";
            });
        legend.append("circle")
            .attr("r", 6)
            .attr("fill", function (d, i) {
                return color(i);
            });
        legend.append("text")
            .attr("text-anchor", function (d, i) {
                return d.x < 180 ? "start" : "end"
            }).attr("transform", function (d) {
            return d.x < 180 ? "translate(8)" : "rotate(180)translate(-8)"
        }).text(function (d) {
            return d.name;
        })
    })

结果:


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

相关阅读更多精彩内容

  • 2016-04-14 本篇文章谈谈 d3 的动画、svg 图形生成器以及 d3 提供的 layout 一、动画 1...
    HeyDelilah阅读 5,675评论 0 2
  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 5,614评论 0 7
  • 本节内容将描述饼状图、力导向图、弦图、集群图、树状图、打包图、分区图、圆形分区图、直方图、捆图、堆栈图、矩阵树图、...
    笨笨的笨小孩阅读 11,664评论 0 2
  • 挂掉高三同桌的电话,感觉我藏匿一年的感情突然迸发涌入全身,在我的平静生活中又泛起涟漪。 他问了我一个特别深奥的问题...
    刘石头阅读 1,810评论 0 2
  • 今天是周日,终于有时间画画了,和大家分享的是一张花鸟与女孩的画。 我光着脚,踩在春天的翅膀上,用我的眼睛看着春的美...
    idea伟阅读 3,369评论 1 10

友情链接更多精彩内容