在学习D3.js的过程中D3 - 强制布局,圈内圆圈
是否可以使用强制布局将圆形放置在另一个圆形形状中,如图所示。我希望在每个节点的单个圆圈到显示每个节点两个圆圈的显示之间转换。有效甜甜圈的大小用于说明数据中的另一个变量。
这可能吗?
在学习D3.js的过程中D3 - 强制布局,圈内圆圈
是否可以使用强制布局将圆形放置在另一个圆形形状中,如图所示。我希望在每个节点的单个圆圈到显示每个节点两个圆圈的显示之间转换。有效甜甜圈的大小用于说明数据中的另一个变量。
这可能吗?
你甚至都不需要使用以外的任何其他一个基本的SVG圈,当你在大多数例子找到。只需将数据绑定到它,应用笔划,并将笔划宽度attr设置为其他变量。或者r - otherVar
,我相信你可以指出这一点。
如果这不能满足,建立自己的形状。 'g' svg element是一个容器元素,可以让你构建任何你喜欢的东西。给g添加两个圆圈,填充他们的方式。确保按照正确的顺序添加它们,因为svg没有'顶部'的概念,只是按照添加它们的顺序绘制。
编辑:好吧,快速演示,让你可以学习一些语法。我没有添加任何评论,但希望代码非常详细和直接。 Find it here.
d3/svg是你不得不猛冲头的东西。我强烈建议花一些时间创建一个沙箱环境,以便快速测试新事物,保存并刷新浏览器以查看结果。最大限度地缩短周转时间是关键。
感谢roippi我能够创建一个包含两个圆形的组。
var nodeCircles = svg.selectAll("g")
.data(nodes);
// Outer circle
var outer = nodeCircles
.enter()
.append("circle")
.attr("class", "node_circle")
.attr("r", function(d) { return d.radius_plus; })
.style("fill", function(d) { return d.color_plus; })
.style("opacity", 0);
// Inner circle
var inner = nodeCircles
.enter()
.append("circle")
.attr("class", "node_circle")
.attr("r", function(d) { return d.radius; })
.style("fill", function(d) { return d.color; })
.style("stroke", function(d) { return d3.rgb(d.color).darker(2); })
.on("mouseover", mouseOver)
.on("mouseout", mouseOut)
.call(force.drag);
通过按钮切换外圈可视性。
如前所述,我使用的是基于桌面的IDE运行/测试可视化语言。目前IDE支持使用D3.js,Raphael,Processin.js,Paper.js和Dygraphs编写的研究。下面的图片...
干杯。感谢您发布您的解决方案,这对那些通过Google搜索绊倒线索的人来说总是有帮助的。 – roippi
是的,这是可能的。强制布局与正在绘制的内容无关,因此您可以有一组对象而不是单个对象。 –
谢谢拉尔斯。你有一个例子吗?你是说我可以为每个节点创建多个形状?对不起,我只是习惯了D3。 – paligap
我没有找到一个例子,但是,基本上就是这样。 –