gpt4 book ai didi

javascript - d3 Circle Packing - 打印多行标签

转载 作者:行者123 更新时间:2023-11-30 20:34:17 27 4
gpt4 key购买 nike

我是 d3(和一般的 JavaScript)的新手,我正在尝试弄清楚如何更改 this example这样每个圆圈的名称下方都印有相应的大小字段。我尝试只更改 JSON,使名称字段类似于 "MergeEdge\n743",但这不起作用(它似乎只是忽略换行符并在一行上打印所有内容)。有什么建议吗?

最佳答案

一个小提示,通常对于 d3,您更喜欢为不同的目标使用单独的代码。它使维护更容易,并且整体上使您在阅读文件时更容易理解。在您的情况下,我们需要添加一个新的文本字段,其坐标将文本置于当前文本下方。所以我们需要添加:

node.filter(function(d) { return !d.children; }).append("text")
.attr("dy", "1.2em")
.text(function(d) { return Math.round(d.r).toString(); });

所以整个 javaScript 代码将是:

var svg = d3.select("svg"),
diameter = +svg.attr("width"),
g = svg.append("g").attr("transform", "translate(2,2)"),
format = d3.format(",d");

var pack = d3.pack()
.size([diameter - 4, diameter - 4]);

d3.json("flare.json", function(error, root) {
if (error) throw error;

root = d3.hierarchy(root)
.sum(function(d) { return d.size; })
.sort(function(a, b) { return b.value - a.value; });

var node = g.selectAll(".node")
.data(pack(root).descendants())
.enter().append("g")
.attr("class", function(d) { return d.children ? "node" : "leaf node"; })
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });

node.append("title")
.text(function(d) { return d.data.name + "\n" + format(d.value); });

node.append("circle")
.attr("r", function(d) { return d.r; });

node.filter(function(d) { return !d.children; }).append("text")
.attr("dy", "0.3em")
.text(function(d) { return d.data.name.substring(0, d.r / 3); });

node.filter(function(d) { return !d.children; }).append("text")
.attr("dy", "1.2em")
.text(function(d) { return Math.round(d.r).toString(); });
});

关于javascript - d3 Circle Packing - 打印多行标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com