我正在嘗試使用d3js來繪製位置處的服務器圖。以下是輸入數據的示例提取。使用d3js,我如何使用樹形佈局將子節點可視化地放在其父節點中?
{"type": "customer", "name": "Acme", "children": [
{
"type": "site",
"name": "Wichita",
"children": [
{
"type": "server",
"name": "server1"
},
{
"type": "server",
"name": "server2"
}
]
},
{
"type": "site",
"name": "Springfield",
"children": [
{
"type": "server",
"name": "server1"
},
{
"type": "server",
"name": "server2"
},
{
"type": "server",
"name": "server3"
}
]
}
]}
該網站將有不同數量的服務器。每個服務器應該是一個代表站點的矩形內的矩形。 我可以單獨創建站點和服務器矩形,但我想我需要將服務器節點綁定到其父節點的 節點上進行適當的分組,特別是如果稍後將svg導入到Visio。輸入json在var treeData中。另外,我是 無法正確定位,看起來使用正確的分組可能更容易。
var viz = d3.select("#viz").append("svg:svg")
.attr("width", 1200)
.attr("height", layoutHeight)
.append("svg:g");
var tree = d3.layout.tree().size([layoutHeight, 300]);
var nodes = tree.nodes(treeData);
viz.append("svg:text")
.attr("dx", "0")
.attr("dy", 20)
.attr("font-size", 24)
.attr("text-anchor", "start")
.text(json.customerName);
var siteNodes = viz.selectAll("g.node")
.data(nodes)
.enter().append("svg:g")
.filter(function(d) { return d.type === "site" })
.attr("transform", function(d) { return "translate(" + d.y + "," + (d.x * 1.5 - (d.children.length * serverHeight * 1.1/2)) + ")"; });
siteNodes.append("svg:rect")
.attr("width", 300)
.attr("height", function(d) { return serverHeight * (d.children.length + 1); })
.attr("stroke", "black")
.attr("stroke-width", "1")
.attr("fill", "white");
var serverNodes = viz.selectAll("g.node")
.data(nodes)
.enter().append("svg:g")
.filter(function(d) { return d.type === "server" })
.attr("transform", function(d) { return "translate(" + (d.y - 125) + "," + d.x + ")"; });
serverNodes.append("svg:rect")
.attr("width", 250)
.attr("height", serverHeight)
.attr("font-size", 10)
.attr("stroke", "black")
.attr("stroke-width", "1")
.attr("fill-opacity", "0.1")
.attr("fill", "blue");
我是新來d3js,我懷疑的一個主要因素是,我不相當,但考慮在適當的方式d3js。
謝謝你的回答,並對遺失的作品表示歉意。我正在思考如何將子節點綁定到父節點。如果這不是首發,我可以調整值直到它們一直工作。 –
[tree layout](https://github.com/mbostock/d3/wiki/Tree-Layout)在每個節點上填充的屬性之一是對父節點的引用。 – FernOfTheAndes
那麼,我真的在談論發生在serverNodes.append()上的圖形綁定,而不是在var nodes = tree.nodes(treeData);發生的代表性綁定。 –