Files

225 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 587d7fab367417b2b2512bd9
title: Додавання міток до кіл точкової діаграми (діаграма розсіювання)
challengeType: 6
forumTopicId: 301477
dashedName: add-labels-to-scatter-plot-circles
---
# --description--
Ви можете додати текст, щоб створити мітки для точок у точковій діаграмі.
Для цього слід відобразити значення, розділені комами, для першого (`x`) та другого (`y`) векторних полів кожного елементу в `dataset`.
Вузлам `text` потрібні атрибути `x` and `y`, щоб розташувати його на полотні SVG. Щоб вирішити це завдання, значення `y` value (визначає висоту) може мати те ж значення, яке елемент `circle` використовує для свого атрибута `cy`. Значення `x` може бути дещо більшим, ніж значення `cx` елемента `circle`, тому мітку видно. Це дозволить перемістити мітку правіше від нанесеної точки.
# --instructions--
Позначайте кожну точку на діаграмі розсіювання (точковій діаграмі), використовуючи елементи `text`. Два значення у тексті мітки повинні відокремлюватись комою і пробілом. Наприклад, мітка для першої точки становить `34, 78`. Задайте атрибут `x` так, щоб його значення становило на `5` одиниць більше, ніж значення, яке використовували для атрибуту `cx` елементу `circle`. Задайте атрибут `y` таким же способом, як для значення `cy` елементу `circle`.
# --hints--
Ваш код повинен мати 10 елементів `text`.
```js
assert($('text').length == 10);
```
Перша мітка повинна мати текст `34, 78`, вектор `x` - зі значенням `39` і вектор `y` - зі значенням `422`.
```js
assert(
$('text').eq(0).text() == '34, 78' &&
$('text').eq(0).attr('x') == '39' &&
$('text').eq(0).attr('y') == '422'
);
```
Друга мітка повинна містити текст `109, 280`, вектор `x` - зі значенням `114` і вектор `y` - зі значенням `220`.
```js
assert(
$('text').eq(1).text() == '109, 280' &&
$('text').eq(1).attr('x') == '114' &&
$('text').eq(1).attr('y') == '220'
);
```
У третій мітці - текст `310, 120`, вектор `x` має значення `315`, а вектор `y` - значення `380`.
```js
assert(
$('text').eq(2).text() == '310, 120' &&
$('text').eq(2).attr('x') == '315' &&
$('text').eq(2).attr('y') == '380'
);
```
У четвертій мітці - текст `79, 411`, вектор `x` має значення `84` вектор `y` - значення `89`.
```js
assert(
$('text').eq(3).text() == '79, 411' &&
$('text').eq(3).attr('x') == '84' &&
$('text').eq(3).attr('y') == '89'
);
```
П'ята мітка міститиме текст `420, 220`, вектор `x` має значення `425`, вектор `y` - значення `280`.
```js
assert(
$('text').eq(4).text() == '420, 220' &&
$('text').eq(4).attr('x') == '425' &&
$('text').eq(4).attr('y') == '280'
);
```
Текст шостої мітки - `233, 145` зі значенням `238` вектора `x` і значенням `355` вектора `y`.
```js
assert(
$('text').eq(5).text() == '233, 145' &&
$('text').eq(5).attr('x') == '238' &&
$('text').eq(5).attr('y') == '355'
);
```
Текст сьомої мітки містить `333, 96` зі значенням `338` вектора `x` і значенням `404` вектора `y`.
```js
assert(
$('text').eq(6).text() == '333, 96' &&
$('text').eq(6).attr('x') == '338' &&
$('text').eq(6).attr('y') == '404'
);
```
Восьма мітка - з текстом `222, 333`, вектор `x` має значення `227`, а вектор `y` - значення `167`.
```js
assert(
$('text').eq(7).text() == '222, 333' &&
$('text').eq(7).attr('x') == '227' &&
$('text').eq(7).attr('y') == '167'
);
```
Дев'ята мітка вміщує текст `78, 320`, векторне поле `x` має значення `83`, а поле `y` - значення `180`.
```js
assert(
$('text').eq(8).text() == '78, 320' &&
$('text').eq(8).attr('x') == '83' &&
$('text').eq(8).attr('y') == '180'
);
```
Текст десятої мітки - `21, 123`, векторне поле `x` має значення `26`, а векторне поле `y` - значення `377`.
```js
assert(
$('text').eq(9).text() == '21, 123' &&
$('text').eq(9).attr('x') == '26' &&
$('text').eq(9).attr('y') == '377'
);
```
# --seed--
## --seed-contents--
```html
<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, i) => d[0])
.attr("cy", (d, i) => h - d[1])
.attr("r", 5);
svg.selectAll("text")
.data(dataset)
.enter()
.append("text")
// Add your code below this line
// Add your code above this line
</script>
</body>
```
# --solutions--
```html
<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, i) => d[0])
.attr("cy", (d, i) => h - d[1])
.attr("r", 5);
svg.selectAll("text")
.data(dataset)
.enter()
.append("text")
.attr("x", (d) => d[0] + 5)
.attr("y", (d) => h - d[1])
.text((d) => (d[0] + ", " + d[1]))
</script>
</body>
```