freeCodeCamp/curriculum/challenges/russian/04-data-visualization/data-visualization-with-d3/use-dynamic-scales.russian.md

5.5 KiB
Raw Blame History

id title challengeType videoUrl localeTitle
587d7fac367417b2b2512bdd Use Dynamic Scales 6 Использование динамических весов

Description

Методы D3 min() и max() полезны, чтобы помочь установить масштаб. Учитывая сложный набор данных, одним из приоритетов является установка масштаба, чтобы визуализация соответствовала ширине и высоте контейнера SVG. Вы хотите, чтобы все данные отображались внутри холста SVG, чтобы они были видны на веб-странице. В приведенном ниже примере задана шкала по оси X для данных графика разброса. Метод domain() передает информацию в шкалу о значениях необработанных данных для графика. Метод range() дает ему информацию о фактическом пространстве на веб-странице для визуализации. В этом примере домен переходит от 0 к максимуму в наборе. Он использует метод max() с функцией обратного вызова, основанной на значениях x в массивах. Диапазон использует ширину холста SVG ( w ), но также включает в себя некоторые дополнения. Это помещает пространство между точками графика рассеяния и краем холста SVG.
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;

// Заполнение между границей холста SVG и графиком
const padding = 30;
const xScale = d3.scaleLinear ()
.domain ([0, d3.max (набор данных, (d) => d [0])])
.range ([padding, w - padding]);
Сначала заполнение может сбивать с толку. Отобразите ось x как горизонтальную линию от 0 до 500 (значение ширины для холста SVG). Включение дополнения в метод range() заставляет график начинаться с 30 по этой линии (вместо 0) и заканчиваться на 470 (вместо 500).

Instructions

Используйте переменную yScale для создания линейной шкалы оси y. Домен должен начинаться с нуля и перейти к максимальному значению y в наборе. Диапазон должен использовать высоту SVG ( h ) и включать прокладку. Заметка
Не забудьте сохранить сюжет правой стороны. Когда вы устанавливаете диапазон для координат y, более высокое значение (высота минус заполнение) является первым аргументом, а нижним значением является второй аргумент.

Tests

tests:
  - text: Текст в <code>h2</code> должен быть 30.
    testString: 'assert(output == 30 && $("h2").text() == "30", "The text in the <code>h2</code> should be 30.");'
  - text: '<code>domain()</code> yScale должен быть эквивалентен <code>[0, 411]</code> .'
    testString: 'assert(JSON.stringify(yScale.domain()) == JSON.stringify([0, 411]), "The <code>domain()</code> of yScale should be equivalent to <code>[0, 411]</code>.");'
  - text: ''
    testString: 'assert(JSON.stringify(yScale.range()) == JSON.stringify([470, 30]), "The <code>range()</code> of yScale should be equivalent to <code>[470, 30]</code>.");'

Challenge Seed

<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;

    // Padding between the SVG canvas boundary and the plot
    const padding = 30;

    // Create an x and y scale

    const xScale = d3.scaleLinear()
                    .domain([0, d3.max(dataset, (d) => d[0])])
                    .range([padding, w - padding]);

    // Add your code below this line

    const yScale = undefined;


    // Add your code above this line

    const output = yScale(411); // Returns 30
    d3.select("body")
      .append("h2")
      .text(output)
  </script>
</body>

Solution

// solution required