--- id: 587d7fa9367417b2b2512bce title: Динамічне налаштування координат для кожної панелі challengeType: 6 forumTopicId: 301487 dashedName: dynamically-set-the-coordinates-for-each-bar --- # --description-- Останнє завдання створило та додало прямокутник до елементу `svg` для кожної точки в`dataset`, щоб зобразити панель. На жаль, усі вони склались у стовпець один на одного. Атрибути `x` та `y` керують розміщенням прямокутника. Вони повідомляють D3, де починати малювати фігуру в зоні `svg`. Останнє завдання розміщує їх усіх до 0 таким чином, щоб кожен стовпчик розташовувався у верхньому лівому кутку. У стовпчиковій діаграмі всі стовпці повинні розташовуватись на однаковому вертикальному рівні, тобто значення `y` лишається незмінним (на 0) для усіх стовпців. Однак, при додаванні нових стовпців значення `x` потрібно змінювати. Пам'ятайте, що більші значення `x` зміщують елементи праворуч. Значення`x` повинно зростати при перегляді масиву елементів у `dataset`. Метод `attr()` у D3 приймає функцію зворотнього зв'язку до цього динамічно встановленого атрибуту. Функція зворотнього зв'язку приймає два аргументи: один для самої точки даних (зазвичай `d`) та один для індексу точки даних у масиві. Другий аргумент для індексу - необов'язковий. Ось такий формат: ```js selection.attr("property", (d, i) => { }) ``` Варто зауважити, що НЕ потрібно писати цикл `for` або використовувати `forEach()` для повторення елементів у наборі даних. Нагадаємо, що метод `data()` аналізує набір даних, і що будь-який інший метод, вказаний після `data()`, запускається одноразово для кожного елемента в наборі даних. # --instructions-- Змініть атрибут `x` функції зворотнього зв'язку таким чином, щоб він повернув індекс на 30. **Примітка:** Ширина кожного елементу 25, тому збільшіть значення кожного `x` на 30, додавши пробіли між елементами. Будь-яке значення, більше 25, спрацювало б за таким же принципом. # --hints-- Перший `rect` повинен мати `0` значенням `x`. ```js assert($('rect').eq(0).attr('x') == '0'); ``` Другий `rect` повинен мати `x` значенням `30`. ```js assert($('rect').eq(1).attr('x') == '30'); ``` Третій `rect` повинен мати `x` значенням `60`. ```js assert($('rect').eq(2).attr('x') == '60'); ``` Четвертий `rect` повинен мати `x` значенням `90`. ```js assert($('rect').eq(3).attr('x') == '90'); ``` П'ятий `rect` повинен мати `x` значенням `120`. ```js assert($('rect').eq(4).attr('x') == '120'); ``` Шостий `rect` повинен мати `x` значенням `150`. ```js assert($('rect').eq(5).attr('x') == '150'); ``` Сьомий `rect` повинен мати `x` повинен мати `180`. ```js assert($('rect').eq(6).attr('x') == '180'); ``` Восьмий `rect` повинен мати `x` значенням `210`. ```js assert($('rect').eq(7).attr('x') == '210'); ``` Дев'ятий `rect` повинен мати `x` значенням `240`. ```js assert($('rect').eq(8).attr('x') == '240'); ``` # --seed-- ## --seed-contents-- ```html ``` # --solutions-- ```html ```