javascript - 为什么圆形对象位于 SVG 容器的左上角?

标签 javascript d3.js svg

下面的代码生成位于容器左上角的圆圈。我希望它位于与数组值对应的位置。 代码如下:

<script>
   var data = [ 30, 40, 50 ]

   var svg = d3.select("body").append("svg")
            .attr("width", 800)
            .attr("height", 500)
            .style("border", "3px solid black");

   var circles = svg.selectAll("g")
                    .data(data)
                    .enter()
                    .append("g");

   circles.append("circle")
          .attr("cX", function(d) { return d; })
          .attr("cY", function(d) { return d; })
          .attr("r", 50 )
          .style("fill", "steelblue")

   circles.append("text")
          .text( function(d) { return d; })

</script>

这是 DOM:

enter image description here

这就是结果:

enter image description here

最佳答案

这里的问题是使用了 cXcY,它们在 SVG 中不存在。属性为小写的 cxcy

所以,这个:

circles.append("circle")
      .attr("cX", function(d) { return d; })
      .attr("cY", function(d) { return d; })
      .attr("r", 50 )
      .style("fill", "steelblue")

应该是这样的:

circles.append("circle")
      .attr("cx", function(d) { return d; })
      .attr("cy", function(d) { return d; })
      .attr("r", 50 )
      .style("fill", "steelblue")

每次您在左上角(SVG 原点)获取 SVG 元素时,都会怀疑 NaN 或设置位置属性的其他问题(xy , x1, y1, x2, y2, cx, cy 等等...)。

这是您的代码,仅更改 cxcy(并更改数据以将圆圈分散得更多):

   var data = [ 100, 200, 300 ]

   var svg = d3.select("body").append("svg")
            .attr("width", 400)
            .attr("height", 400)
            .style("border", "3px solid black");

   var circles = svg.selectAll("g")
                    .data(data)
                    .enter()
                    .append("g");

   circles.append("circle")
          .attr("cx", function(d) { return d; })
          .attr("cy", function(d) { return d; })
          .attr("r", 50 )
          .style("fill", "steelblue")

   circles.append("text")
          .text( function(d) { return d; })
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

关于javascript - 为什么圆形对象位于 SVG 容器的左上角?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39134738/

相关文章:

javascript - 数据更改时 D3.js 表不刷新

javascript - 使用 jQuery ui slider 更改 d3.js 绘制的矩形元素的高度

svg - 将 feDropShadow 添加到 SVG 中的垂直线使其消失

animation - 如何在另一个动画结束时开始一个动画?

html - 跨设备/屏幕尺寸的 SVG 缩放问题

javascript - 在 jQuery 中上传前单击预览按钮时显示图像

javascript - 平滑变化的文本

d3.js - .append() 根据条件不同的选择?

javascript - 哪种网络推送通知技术最可靠?

javascript回调闭包 undefined variable