使用d3js创建矩形而不是气泡图形

4

我使用了这个http://bl.ocks.org/mbostock/4063269来创建圆形,但我需要创建矩形而不是圆形,并且所有这些矩形需要被打包在一个更大的矩形中。请帮忙。

1个回答

4
这是如何制作矩形而不是圆形。
  node.append("rect")
      .attr("width", function(d) { return d.r*2; })//width is the diameter
      .attr("x", function(d) { return d.r*-1; })
      .attr("y", function(d) { return d.r*-1; })
      .attr("height", function(d) { return d.r*2; })//height is the diameter
      .style("fill", function(d) { return color(d.packageName); });

现在要创建一个矩形,将它们全部包含起来。
  //get all the data
  var data = d3.selectAll("g")[0].map(function(d) {
    return d3.select(d).data()[0]
  })
  //get the min x max x min y max y
  var xmin = d3.min(data, function(d){return d.x-d.r})
  var xmax = d3.max(data, function(d){return d.x+d.r})
  var ymin = d3.min(data, function(d){return d.y-d.r})
  var ymax = d3.max(data, function(d){return d.y+d.r})

  //make a rectangle to make it over other rectangles.
  svg.insert("rect" ,":first-child")
  .attr("x", xmin)
    .attr("y", ymin)
    .attr("height", ymax-ymin)
    .attr("width", xmax-xmin)
    .style("opacity", 0.3)
    .style("fill","blue");

工作示例在这里

谢谢。所有这些小矩形都需要被一个大矩形包围起来,在你的例子中,所有的小矩形都是重叠的,并且间距不均匀。 - user123
抱歉..我复制了你上面的代码来将它们打包成一个大矩形。它运行良好。 - user123
对于间隔矩形,您可以像这样更改填充:var bubble = d3.layout.pack() .sort(null) .size([diameter, diameter]) .padding(25.5); 这里是可工作的代码 http://plnkr.co/edit/Ku250M0PeRutyQU4VJxn?p=preview - Cyril Cherian
我创建了下面这个,我使所有的大小都相同。现在看起来很好,但是看起来像一个六边形。似乎它们不是从左上角(小矩形)开始创建的,而是从中心向外创建的。有没有办法去掉所有这些空格并统一间距?左上角、右上角、左下角和右下角有更多的白色间距。http://plnkr.co/edit/nQKzGqlpKSwW3JYpp2jA?p=preview - user123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接