- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 d3.js
创建了一个家谱。谁能指导我如何改变 child 的颜色?比如相对论物理学或现代物理学?我不知道如何选择一个 child 并改变颜色。谢谢
最佳答案
您可以根据文本
更改节点的颜色,并且可以为需要更改的文本维护颜色模式(如果这是您想要实现的目标)。
var treeData = {
name: " physic ",
children: [
{
name: "Classical Physics ",
children: [
{
name: "Relativistic Physics"
},
{
name: "Quantum Mechanics"
}
]
},
{
name: "Modern Physics"
},
{
name: "Atomic Physics"
}
]
};
var colorSchema = {
"Relativistic Physics": "red",
"Modern Physics": "yellow"
};
// Set the dimensions and margins of the diagram
var margin = { top: 20, right: 120, bottom: 30, left: 120 },
width = 3000 - margin.left - margin.right,
height = 800 - margin.top - margin.bottom;
// append the svg object to the body of the page
// appends a 'group' element to 'svg'
// moves the 'group' element to the top left margin
var svg = d3
.select("body")
.append("svg")
.attr("width", width + margin.right + margin.left)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var i = 0,
duration = 750,
root;
// declares a tree layout and assigns the size
var treemap = d3.tree().size([height, width]);
// Assigns parent, children, height, depth
root = d3.hierarchy(treeData, function (d) {
return d.children;
});
root.x0 = height / 2;
root.y0 = 0;
// Collapse after the second level
root.children.forEach(collapse);
update(root);
// Collapse the node and all it's children
function collapse(d) {
if (d.children) {
d._children = d.children;
d._children.forEach(collapse);
d.children = null;
}
}
function update(source) {
// Assigns the x and y position for the nodes
var treeData = treemap(root);
// Compute the new tree layout.
var nodes = treeData.descendants(),
links = treeData.descendants().slice(1);
// Normalize for fixed-depth.
nodes.forEach(function (d) {
d.y = d.depth * 180;
});
// ****************** Nodes section ***************************
// Update the nodes...
var node = svg.selectAll("g.node").data(nodes, function (d) {
return d.id || (d.id = ++i);
});
// Enter any new modes at the parent's previous position.
var nodeEnter = node
.enter()
.append("g")
.attr("class", "node")
.attr("transform", function (d) {
return "translate(" + source.y0 + "," + source.x0 + ")";
})
.on("click", click);
// Add Circle for the nodes
nodeEnter
.append("circle")
.attr("class", "node")
.attr("r", 1e-6)
.style("fill", function (d) {
return d._children ? "red" : "yellow";
});
// Add labels for the nodes
nodeEnter
.append("text")
.attr("dy", ".35em")
.attr("x", function (d) {
return d.children || d._children ? -13 : 13;
})
.attr("text-anchor", function (d) {
return d.children || d._children ? "end" : "start";
})
.text(function (d) {
return d.data.name;
});
// UPDATE
var nodeUpdate = nodeEnter.merge(node);
// Transition to the proper position for the node
nodeUpdate
.transition()
.duration(duration)
.attr("transform", function (d) {
return "translate(" + d.y + "," + d.x + ")";
});
// Update the node attributes and style
nodeUpdate
.select("circle.node")
.attr("r", 10)
.style("fill", function (d) {
return (
colorSchema[d.data.name] || (d._children ? "lightsteelblue" : "#fff")
);
})
.attr("cursor", "pointer");
// Remove any exiting nodes
var nodeExit = node
.exit()
.transition()
.duration(duration)
.attr("transform", function (d) {
return "translate(" + source.y + "," + source.x + ")";
})
.remove();
// On exit reduce the node circles size to 0
nodeExit.select("circle").attr("r", 1e-6);
// On exit reduce the opacity of text labels
nodeExit.select("text").style("fill-opacity", 1e-6);
// ****************** links section ***************************
// Update the links...
var link = svg.selectAll("path.link").data(links, function (d) {
return d.id;
});
// Enter any new links at the parent's previous position.
var linkEnter = link
.enter()
.insert("path", "g")
.attr("class", "link")
.attr("d", function (d) {
var o = { x: source.x0, y: source.y0 };
return diagonal(o, o);
});
// UPDATE
var linkUpdate = linkEnter.merge(link);
// Transition back to the parent element position
linkUpdate
.transition()
.duration(duration)
.attr("d", function (d) {
return diagonal(d, d.parent);
});
// Remove any exiting links
var linkExit = link
.exit()
.transition()
.duration(duration)
.attr("d", function (d) {
var o = { x: source.x, y: source.y };
return diagonal(o, o);
})
.remove();
// Store the old positions for transition.
nodes.forEach(function (d) {
d.x0 = d.x;
d.y0 = d.y;
});
// Creates a curved (diagonal) path from parent to the child nodes
function diagonal(s, d) {
path = `M ${s.y} ${s.x}
C ${(s.y + d.y) / 2} ${s.x},
${(s.y + d.y) / 2} ${d.x},
${d.y} ${d.x}`;
return path;
}
// Toggle children on click.
function click(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else {
d.children = d._children;
d._children = null;
}
update(d);
}
}
.node circle {
fill: #fff;
stroke: steelblue;
stroke-width: 3px;
}
.node text {
font: 12px sans-serif;
font-weight: bold;
}
.link {
fill: none;
stroke: #ccc;
stroke-width: 2px;
}
.color {
color: #ff0000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
您始终可以在 colorSchema
中为文本添加您需要的颜色。
关于javascript - 在 d3.js 中更改家谱中的家庭成员颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71891531/
我做到了,但它没有显示答案 当我询问兄弟,姐妹,叔叔,阿姨时 这是我写的,有什么问题吗? /*uncle(X, Y) :– male(X), sibling(X, Z), parent(Z, Y).*
我即将参加考试,需要有关家谱的考试问题的帮助。我以前做过树,但只有这种格式: 数据树 a = 空 |叶一个 |节点a(树a)(树a) 基本上,一棵树要么是空节点,要么是叶节点,或者是一个有两棵树递归跟
有没有办法让子元素跟随其父元素? 问题是,如果只有一个子节点,而父节点有一大段文本,连接器的位置就会变得非常糟糕。我该如何解决? Fiddle demo * {margin: 0; padding:
我正在尝试存储家谱。这是我使用的平台,Zend framework, Mysql, Ajax我搜索了 stackoverflow 我遇到了这篇文章,它对处理对象方面的数据非常有帮助。 "Family
家谱中家谱的算法是怎么做的? 例如 parent A有一个 child B和C。那么,如果 child C将来也生了一个 child 怎么办。它如何使用数据库添加到树中? 我看过 Jit 的 RGra
我对这个任务一无所知。我需要像这样制作家谱 但我无法解决 Main.java 中的 child 问题。对于每个名字,我都必须给 child 写 null 。 这是我的代码:Main.java 。第二个
我使用 CSS 创建了一个家谱。 家谱可以正常工作,但问题是如果一行中的列表太多,它会在行的右端断开该行,并在新行上显示。 如何在不破坏子元素的情况下使这个家谱水平延伸?即使我在页面底部没有水平滚动条
它来 self 的家庭作业。有家谱 a + b / | | \
正如您在下面的代码片段中所看到的,家谱显示得不是很好。那是因为容器不够宽,装不下它。我想通过向容器添加滚动条来解决这个问题,但不幸的是,这不起作用。我在列表中尝试了 nowrap,但无济于事。我有什么
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,
我正在尝试用 PHP 做一个传销项目。现在我陷入了 MLM 的二叉树表示。请帮我实现这棵树。 sample tree structre .请帮我在附加图片上构建一个树状结构。 Sample tree
需要帮助!是否可以将此网络树居中 http://bvusolutions.com/tree2.html加载页面后?我还想将它放在 960px 宽度的 div 中,以避免滚动并具有缩放功能。 每次我添加
我是一名优秀的程序员,十分优秀!