给 Circle 元素添加属性(实现散点图)

62 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的23天,点击查看活动详情

给 Circle 元素添加属性

介绍

上个挑战为 dataset 中的每个点都创建了 circle 元素,并将它们添加到 SVG 画布上。 但是 D3 需要更多关于位置和 circle 大小的信息来正确地显示它们。

在 SVG 中 circle 有三个主要的属性。 cxcy 属性是坐标。 它们告诉 D3 将图形的中心放在 SVG 画布的何处。 半径( r 属性)给出 circle 的大小。

recty 坐标一样,circlecy 属性是从 SVG 画布的顶端开始测量的,而不是从底端。

所有的属性都可以用回调函数来动态设值。 记住,所有串联在 data(dataset) 后面的方法会为 dataset 中的每个对象都运行一次。 回调函数中的 d 参数指在 dataset 中的当前对象,对每个点来说都是一个数组。 你可以使用方括号的方式,如 d[0],来访问数组中的值。

挑战

circle 元素添加 cxcyr 属性。 cx 的值应该是 dataset 中每个对象的数组的第一个数, cy 的值应该根据数组中的第二个值,但是要确保正向显示图表而不是倒转。 所有 circle 的 r 值应为 5

  1. 你应该有 10 个 circle 元素。
  2. 第一个 circle 元素的 cx 值应为 34cy 值应为 422r 值应为 5
  3. 第二个 circle 元素的 cx 值应为 109cy 值应为 220r 值应为 5
  4. 第三个 circle 元素的 cx 值应为 310cy 值应为 380r 值应为 5
  5. 第四个 circle 元素的 cx 值应为 79cy 值应为 89r 值应为 5
  6. 第五个 circle 元素的 cx 值应为 420cy 值应为 280r 值应为 5
  7. 第六个 circle 元素的 cx 值应为 233cy 值应为 355r 值应为 5
  8. 第七个 circle 元素的 cx 值应为 333cy 值应为 404r 值应为 5
  9. 第八个 circle 元素的 cx 值应为 222cy 值应为 167r 值应为 5
  10. 第九个 circle 元素的 cx 值应为 78cy 值应为 180r 值应为 5
  11. 第十个 circle 元素的 cx 值应为 21cy 值应为 377r 值应为 5
<body>
  <script>
    const dataset = [[ 34,    78 ],
                  [ 109,   280 ],
                  [ 310,   120 ],
                  [ 79,    411 ],
                  [ 420,   220 ],
                  [ 233,   145 ],
                  [ 333,   96 ],
                  [ 222,   333 ],
                  [ 78,    320 ],
                  [ 21,    123 ]
                ];


    const w = 500;
    const h = 500;

    const svg = d3.select("body")
                  .append("svg")
                  .attr("width", w)
                  .attr("height", h);

    svg.selectAll("circle")
       .data(dataset)
       .enter()
       .append("circle")
       
       .attr("cx",d=>d[0])
       .attr("cy",d=>h-d[1])
       .attr("r",5)

  </script>
</body>