【问题标题】:D3 - force layout, circle within circleD3——强制布局,圈内圈
【发布时间】:2013-07-19 10:08:09
【问题描述】:

在学习D3.js的过程中。

是否可以根据图片使用强制布局将圆形放置在另一个圆形内。我希望在每个节点的单个圆圈之间转换为每个节点显示两个圆圈的显示。有效甜甜圈的大小用于说明数据中的另一个变量。

这可能吗?

【问题讨论】:

  • 是的,这是可能的。力布局与正在绘制的内容无关,因此您可以拥有一组对象而不是单个对象。
  • 谢谢拉尔斯。你有一个例子吗?你是说我可以为每个节点创建多个形状?抱歉,我才刚习惯 D3。
  • 我没有找到例子,但是是的,基本上就是这样。

标签: javascript svg d3.js force-layout


【解决方案1】:

您甚至不需要使用除了基本的 svg 圆圈以外的任何东西,正如您在大多数示例中发现的那样。只需将数据绑定到它,应用笔画,然后将笔画宽度属性设置为您的其他变量。或者r - otherVar,我相信你能弄清楚那部分。

如果这不满足,构建你自己的形状。 'g' svg element 是一个容器元素,可以让你构建任何你喜欢的东西。将两个圆圈添加到 g,按照您的喜好填充它们。确保以正确的顺序添加它们,因为 svg 没有“在顶部”的概念,事物只是按照添加它们的顺序绘制。

编辑:好的,快速演示,这样你就可以学习一些语法。我没有添加任何 cmets,但希望代码非常冗长和简单。 Find it here.

d3/svg 是你必须用头猛击一段时间的东西。我强烈建议您花一些时间创建一个沙盒环境,您可以在其中快速测试新事物、保存、刷新浏览器以查看结果。缩短周转时间是关键。

【讨论】:

  • 这是一个有趣的想法,但我想在不改变笔画的情况下达到预期的结果。我已经在圆圈上画了一个笔触,这有助于在屏幕上理解形状。
  • 嗯,没关系,如果你想建立自己的形状,你可以这样做。正如 Lars 所说,力布局并不关心你让节点看起来像什么。我将在其中编辑更多信息。
  • 我似乎找不到的是如何创建一个由两个圆形组成的组的语法。为不同类型的 SVG 形状创建一个组是可以的,但是如何将两个圆组合在一起呢?
  • 好的,再编辑一次。做了一个快速演示来帮助语法。这更像是一个“我如何 svg”的问题,而不是“我如何 d3”的问题,但这很好,这些东西并不是特别直观。我建议至少阅读整个教程:alignedleft.com/tutorials/d3
  • 感谢您的帮助 roippi。您的信息为我指明了正确的方向。我有一个基于桌面的 IDE,用于在 D3、Raphael、Processing.js、Paper 和 Dygraphs 中工作。我会用截图发布另一个答案。再次感谢。
【解决方案2】:

感谢 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 编写的研究。下图……

【讨论】:

  • 干杯。感谢您发布您的解决方案,这对于通过谷歌搜索偶然发现该主题的人总是有帮助的。
猜你喜欢
  • 2018-11-15
  • 2012-10-28
  • 2012-02-23
  • 2012-08-01
  • 2013-11-15
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多