我是d3
(以及JavaScript
一般的新手),我正试图弄清楚如何更改this example,以便每个圈子都有相应的大小字段印在名字下面。我尝试改变JSON,因此名称字段类似"MergeEdge\n743"
,但这不起作用(它似乎只是忽略换行符并在一行上打印)。有什么提示吗?
答案 0 :(得分:1)
一个小小的提示,通常使用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(); });
});