开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的23天,点击查看活动详情
给 Circle 元素添加属性
介绍
上个挑战为 dataset 中的每个点都创建了 circle 元素,并将它们添加到 SVG 画布上。 但是 D3 需要更多关于位置和 circle 大小的信息来正确地显示它们。
在 SVG 中 circle 有三个主要的属性。 cx 和 cy 属性是坐标。 它们告诉 D3 将图形的中心放在 SVG 画布的何处。 半径( r 属性)给出 circle 的大小。
和 rect 的 y 坐标一样,circle 的 cy 属性是从 SVG 画布的顶端开始测量的,而不是从底端。
所有的属性都可以用回调函数来动态设值。 记住,所有串联在 data(dataset) 后面的方法会为 dataset 中的每个对象都运行一次。 回调函数中的 d 参数指在 dataset 中的当前对象,对每个点来说都是一个数组。 你可以使用方括号的方式,如 d[0],来访问数组中的值。
挑战
为 circle 元素添加 cx、cy、r 属性。 cx 的值应该是 dataset 中每个对象的数组的第一个数, cy 的值应该根据数组中的第二个值,但是要确保正向显示图表而不是倒转。 所有 circle 的 r 值应为 5。
- 你应该有 10 个
circle元素。 - 第一个
circle元素的cx值应为34,cy值应为422,r值应为5。 - 第二个
circle元素的cx值应为109,cy值应为220,r值应为5。 - 第三个
circle元素的cx值应为310,cy值应为380,r值应为5。 - 第四个
circle元素的cx值应为79,cy值应为89,r值应为5。 - 第五个
circle元素的cx值应为420,cy值应为280,r值应为5。 - 第六个
circle元素的cx值应为233,cy值应为355,r值应为5。 - 第七个
circle元素的cx值应为333,cy值应为404,r值应为5。 - 第八个
circle元素的cx值应为222,cy值应为167,r值应为5。 - 第九个
circle元素的cx值应为78,cy值应为180,r值应为5。 - 第十个
circle元素的cx值应为21,cy值应为377,r值应为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>