Мащаб, домейн и обхват в

Ключова задача при визуализацията на данни е да ги съчетаете с визуални елементи. За да опрости процеса на картографиране, D3 предоставя специални конструкции, наречени мащаб. Ролята на мащаба обаче не се ограничава до съвпадение, те могат да служат и като градивни елементи за по-сложни структури в d3.

Какво представлява мащабът? мащабът може да се разглежда като математическа функция, която преобразува някаква стойност от един интервал, наречен домейн, в стойност, която принадлежи на друг интервал, наречен диапазон.

Нека разгледаме най-простия пример. Да, имаме обменния курс. Например обменният курс на рублата спрямо долара се промени за определен период от време и представлява следните стойности: 64, 62, 63, 59, 60, 57. Това означава, че можем да оценим приблизителния диапазон на разсейването на стойностите - от 50 до 70 рубли за долар. Диапазонът е от 50 до 70 и ще действа като интервал на домейна.

Да предположим, че трябва да представим промяната в обменния курс на диаграмата, например, по оста X. Но за да изглежда всичко повече или по-малко, трябва да мащабираме интервала [50, 70] с някакъв сегмент от оста X, например със сегмент от 0 до 50. За това трябва да използваме функцията за мащабиране.

С d3 можем да направим подобно картографиране като това:

Функцията d3.scale.linear() автоматично ще картографира стойности от един интервал към стойности от друг. В резултат на това конзолата ще покаже следните числа:

Тези числа ще представляват x-координатите.

Линейната функция d3.scale.linear() беше използвана тук като мащаб. Но освен него можем да използваме и редица други.

И така, функцията d3.scale.pow() връща определена степен на число:

Резултатът от програматаще бъде следният изход:

Тоест, тъй като двойка се предава на метода .exponent(2), всяко число от масива се повдига на втора степен и самата формула ще изглежда така: f(n) = n^2. В този случай не е необходимо да използваме интервали на домейн и диапазон. Могат обаче да се използват и интервали, в който случай формулата също ще се промени:

Вместо метода range, тук се използва методът rangeRound(), който има същата цел, но също така ви позволява да закръглите получените стойности.

Сега изходът ще бъде различен:

И формулата ще изглежда така: f(n) = a*n^2 + b, 1 d3.scale.log() . По подразбиране е log base 10:

За да направим числата по-четни, можем да приложим закръгляване с функцията d3.round: data[i]=d3.round(log(data[i]))

Друга функция d3.time.scale() ви позволява да сравнявате линейни интервали с времеви интервали, може да бъде полезно, например, ако решим да покажем една ос за дата:

Тук някакъв набор от дати от масива с данни се интерполира към сегмент от 0 до 300. В резултат на това получаваме следния изход: