Elijah Meeks w akcji Helionie Spis treści Przedmowa 9 Podziękowania 11 O książce 13 C z ę ś ć I. P o d s ta w y b i b l i o t e k i D 3 .js 17 Rozdzia...
Spis treści Przedmowa 9 Podziękowania O książce 13
11
C z ę ś ć I. P o d s t a w y b i b l i o t e k i D 3 .js
17
Rozdział 1. W prow adzenie do biblioteki D3.js 1.1. 1.2.
1.3.
1.4.
1.5. 1.6.
1.7.
19
Czym jest D3.js? 20 Jak działa biblioteka D3? 21 1.2.1. W wizualizacji danych ważne są nie tylko aspekty wizualne 22 1.2.2. W bibliotece D3 istotne są selekcja i wiązanie danych 26 1.2.3. Biblioteka D3 umożliwia określanie wyglądu elementów stron internetowych na podstawie powiązanych danych 27 1.2.4. Elementami strony mogą być elementy div, państwa lub diagramy przepływu 27 Stosowanie standardu HTM L5 28 1.3.1. Model DOM 29 1.3.2. Pisanie kodu w konsoli 34 1.3.3. SVG 34 1.3.4. Style CSS 39 1.3.0. JavaScript 44 Standardy dotyczące danych 49 1.4.1. Dane tabelaryczne 50 1.4.2. Dane zagnieżdżone 50 1.4.3. Dane sieciotce 50 1.4.4. Dane geograficzne 51 1.4.5. Dane surowe 51 1.4.6. Obiekty 53 Standardy z obszaru wizualizowania informacji stosowane w bibliotece D3 54 Twoja pierwsza aplikacja oparta na bibliotece D3 1.6.1. „Witaj, świecie” z elementami
56 1.6.2. „Witaj, świecie” z kołami 56 1.6.3. Komunikowanie się z biblioteką D3 5S Podsumowanie 61
55
Spis treści
4
Rozdział 2. Przepływ danych podczas wizualizowania informacji 2.1.
2.2.
2.3.
2.4.
Praca z danymi 64 2.1.1. W czytywanie danych 64 2.1.2. Formatowanie danych 67 2.1.3. Przekształcanie danych 69 2.1.4. Pomiar danych 73 W iązanie danych 74 2.2.1. Selekcje i wiązanie 74 2.2.2. Dostęp do danych za pomocą funkcji wewnątrz wierszowych 2.2.3. Uwzględnianie skal 79 Styl, atrybuty i treść w prezentacji danych 81 2.3.1. Wizualizacja oparta na wczytanych danych S2 2.3.2. Ustawianie kanałów S4 2.3.3. Instrukcje enter , update i exit S7 Podsumowanie 93
R ozdział 3. Projektotoanie sterowane danym i i interakcje 3.1.
3.2.
3.3.
3.4.
C zęść
II. P o d s t a w y w i z u a l i z o w a n i a i n f o r m a c j i
Rozdział 4. Kom ponenty w ykresów 4.1.
4.2.
4.3.
95
A rchitektura projektu 96 3.1.1. Dane 96 3.1.2. Zasoby 97 3.1.3. Rysunki 97 3.1.4. Arkusze stylów 97 3.1.5. Biblioteki zewnętrzne 9S Interaktyw ne style i model DOM 100 3.2.1. Zdarzenia 100 3.2.2. Przejścia graficzne 103 3.2.3. Manipulowanie modelem D OM 105 3.2.4. Sensowne korzystanie z kolorów 107 W stępnie generowane treści 113 3.3.1. Rysunki 113 3.3.2. Fragmenty kodu w HTM L-u 115 3.3.3. Wstępnie wygenerowana grafika SVC 116 Podsumowanie 122
125
Ogólne zasady tworzenia wykresów 4.1.1. Generatory 127 4.1.2. Komponenty 127 4.1.3. Układy 127 Tworzenie osi 128 4.2.1. Wyświetlanie danych 12S 4.2.2. Określanie stylu osi 131 Złożone obiekty graficzne 135
126
123
Spis treści 4.4.
4.5.
W ykresy liniowe i interpolacja 143 4.4.1. Rysowanie linii od określonych punktów 145 4.4.2. Rysowanie wielu linii za pomocą kilku generatorów 4.4.3. Omówienie interpolacji linii 14S Złożone akcesory 149
4.6.
Podsumowanie
Rozdział 5. Układy
158
159
5.1.
Histogramy
5.2.
Wykresy kołowe 162 5.2.1. Rysowanie tcykresu kołowego 163 5.2.2. Tworzenie tcykresu pierścieniotcego 5.2.3. Przejścia 166 Układy dla grup kół 168
5.3.
160
5.4.
Drzewa
5.5. 5.6.
Układy skumulowane 177 Wtyczki służące do dodawania układów 5.6.1. Diagram Sankeya 1S3 5.6.2. Chmury słów 190 Podsumowanie 195
5.7.
6.2.
6.3.
165
172
Rozdział 6. W izualizowanie sieci 6.1.
183
197
Statyczne diagram y sieci 198 6.1.1. Dane o sieci 199 6.1.2. Macierz sąsiedztwa 201 6.1.3. Diagram lukowy 205 Układ oparty’ na siłach 208 6.2.1. Tworzenie dla sieci diagramu opartego na silach 209 6.2.2. Znaczniki SVG 210 6.2.3. M iary sieci 214 6.2.4. Ustawienia układu opartego na silach 216 6.2.5. Aktualizowanie sieci 21S 6.2.6. Usuwanie i dodawanie węzłów oraz krawędzi 219 6.2.7. Ręczne określanie pozycji węzłów 223 6.2. S. Optymalizacja 226 Podsumowanie 226
Rozdział 7. W izualizowanie informacji geoprzestrzennych 7.1.
7.2.
7.3.
147
Podstawy tworzenia m ap 229 7.1.1. Szukanie danych 230 7.1.2. Rysowanie punktów na mapie 234 7.1.3. Odwzorowania i obszary 236 7.1.4. Interaktywność 23S Tworzenie lepszych map 239 7.2.1. Siatka kartograficzna 240 7.2.2. Operacja zoom 241 Zaawansowane aspekty’ map 244 7.3.1. Tworzenie i obracanie glolnisa 244 7.3.2. Odwzorowanie satelitarne 250
227
Spis treści
6
7.4.
7.5. 7.6.
7.7.
D ane i funkcje w bibliotece TopoJSON 251 7.4.1. Format plików TopoJSON 251 7.4.2. Wyświetlanie danych w formacie TopoJSON 252 7.4.3. Scalanie 253 7.4.4. Sąsiednie obiekty 255 Tworzenie map z kafelkami za pomocą instrukcji d3.geo.tile Dalsza lektura związana z mapami 261 7.6.1. Zoom dla transformacji 262 7.6.2. Rysowanie na płótnie 262 7.6.3. Zmiana odwzorowania dla danych rastrowych 7.6.4. Technika hexbinning 262 7.6.5. Diagramy Woronoja 262 7.6.6. M apy anamorficzne 262 Podsumowanie 263
256
262
R ozdział 8. M anipulowanie tradycyjnym modelem D O M za pomocą biblioteki D3 265 8.1.
8.2.
8.3.
8.4.
8.5.
C zęść
Przygotowania 267 5.1.1. Style CSS 267 8.1.2. Kod w H TM L-u 26S Arkusz kalkulacyjny 268 8.2. J. Tworzenie arkusza kalkulacyjnego za pomocą tabeli 26S 8.2.2. Tworzenie arkusza kalkulacyjnego za pomocą elementów
5.2.3. Dodawanie animacji do arkusza kalkulacyjnego 272 Płótno 273 5.3.1. Rysowanie na płótnie 275 8.3.2. Rysowanie i zapisywanie wielu obrazków 275 G aleria rysunków 277 8.4.1. Interaktywne wyróżnianie elementów modelu DOM 279 8.4.2. Selekcja elementów 2S1 Podsumowanie 283
III. T e c h n i k i z a a w a n s o w a n e
285
R ozdział 9. Łączenie kom ponentów aplikacji interaktyw nych 9.1.
9.2. 9.3.
9.4.
270
287
Jedno źródło danych, wiele perspektyw 289 9.1.1. Podstawy tworzenia panelu kontrolnego dla danych 291 9.1.2. A rkusz kalkulacyjny 292 9.1.3. W ykres słupkowy 293 9.1.4. Grupy kół 293 9.1.5. Zmiana wielkości wykresów na podstawie rozmiaru ekranu Interaktywność — zdarzenia związane z kursorem myszy 296 Kontrolka wyboru zakresu 299 9.3.1. Tworzenie kontrolki wyboru zakresu 300 9.3.2. Ułatwianie korzystania z kontrolki wyboru zakresu 9.3.3. Zdarzenia kontrolki wyboru zakresu 306 9.3.4. Ponowne rysowanie komponentów 307 Podsumowanie 308
303
294
Spis treści
Rozdział 10. Tworzenie układów i komponentów 10.1. Tworzenie układu
311
312
10.2. Pisanie własnych komponentów 319 10.2.1. W czytywanie przykładowych danych 320 10.2.2. Wiązanie komponentów ze skalami 322 10.2.3. Dodawanie etykiet do komponentu 327 10.3. Podsumowanie 330
Rozdział 11. W izualizowanie dużych zbiorów dantjch
331
11.1. Duże zbiory danych geograficznych 332 11.1.1. Generowanie losowych danych geograficznych 334 11.1.2. Rysowanie danych geograficznych na płótnie 336 11.1.3. Techniki wyświetlania elementów w trybie mieszanym 11.2. Duże zbiory danych o sieciach 344
33S
11.3. Optymalizowanie wybierania danych na podstawie współrzędnych x i y za pomocą drzew czwórkowych 349 11.3.1. Generowanie losowych danych o współrzędnych x i y 349 11.3.2. W ybór zakresu na podstawie współrzędnych x i y 349 11.4. Inne techniki optymalizacji 354 11.4.1. Unikanie ustawiania ogólnego stylu opacity 354 11.4.2. Unikanie ogólnych selekcji 355 11.4.3. Wstępne wyznaczanie pozycji 355 11.5. Podsumowanie 356
Rozdział 12. Biblioteka D 3 i urządzenia przenośne
357
12.1. Zasady tworzenia projektów sterow anych danymi dla urządzeń przenośnych 12.2. Wizualizacja i dotyk 359 12.2.1. Funkcja d3.touches 361 12.2.2. Rejestrowanie na liście zdarzeń związanych z dotykiem 361 12.2.3. Wizualizowanie zdarzeń związanych z dotykiem 362 12.2.4. Przesuwanie za pomocą jednego przeciągnięcia palcem 363 12.2.5. Wizualizowanie analizy dotknięć 365 12.2.6. Zoom oparty na szczypnięciach 367 12.2.7. Rotacja z użyciem trzech palców 370 12.2.S. Łączenie wszystkich elementów 371 12.3. Dostosowujące się wizualizacje danych 374 12.3.1. Tworzenie dostosowujących się wizualizacji danych 375 12.3.2. Tworzenie podstawowej wersji aplikacji 376 12.3.3. Rozwiązanie na skalę tabletu 3S0 12.3.4. Rozwiązanie dostosowane do telefonu 3S4 12.3.5. Automatyczne tcykrywanie ekranów o różnych rozmiarach 3S9 12.3.6. Ogólne zasady tworzenia dostosowujących się wizualizacji danych 12.4. Geolokalizacja 389 12.5. Podsumowanie 390
Skorowidz
393
359
3S9
Przedmowa Od dawien dawna uwielbiam tworzyć gry różnego rodzaju — planszowe, RPG, kom puterowe. Kocham wymyślać reguły, liczby i kategorie. Naturalną konsekwencją tego jest fascynacja wizualizowaniem danych. Można na różne sposoby7 przedstawiać na pasku poziom uszkodzeń obiektów, czary ilustrować ikonami, obszar podzielić na sześciokąty lub narysować mapę pomagającą dotrzeć do skarbu. Jednak dopiero gdy na studiach zacząłem pracować nad mapami, zdałem sobie sprawę, jak niezmierzone pokłady7 czasu i energii zainwestowano w7 opracowanie optymalnych technik repre zentowania danych. Bibliotekę D3 zacząłem poznawać już po tym, gdy pracowałem z bazami danych, danymi dla map i danymi sieciowymi, korzystając z różnych pakietów. Umiałem też pisać kod we Flashu. Byłem podekscytowany7, gdy7zetknąłem się z D3 — biblioteką JavaScriptu, służącą nie tylko do ogólnego wizualizowania informacji, ale też obsłu gującą bardzo konkretne rodzaje danych geograficznych i sieciowych. Dodatkową jej zaletą było współdziałanie z modelem DOM i zgodność ze standardami sieciowymi (zwłaszcza w7porównaniu z Flashem, który tych cech nie posiada). Od tego czasu używam D3 do wykonywania rozmaitych zadań, w7tym do tworzenia elementów7interfejsu użytkownika rozwijanych zwykle za pomocą biblioteki jOueiy. Gdy7wydawnictwo Manning skontaktowało się ze mną i przedstawiło propozycję napi sania tej książki, pomyślałem, że będzie to dla mnie znakomita okazja do dokładnego zapoznania się z D3 i dowiedzenia się, jak działa każdy7drobny7komponent tej biblioteki. Chciałem napisać książkę, która jest nie ty7lko wprowadzeniem do D3, ale także dokład nie omawia różne tak ciekawe dla mnie elementy7wspominanej biblioteki (na przy kład dotyczące map i sieci) oraz łączy7je ze sobą. W efekcie książka jest znacznie dłuższa, niż oczekiwałem, i opisuje wszystko — od podstaw7generowania linii i kształtów7po wykorzystanie większości układów, jakie można wyobrazić sobie w7 kontekście wizualizowania danych. Znajdziesz tu także fragmenty7poświęcone mapom, sieciom, urządzeniom przenośnym i optymalizacji. Starałem się zrobić wszystko, by7czytelnicy jak najlepiej zrozumieli działanie narzę dzi do wizualizowania danych — niezależnie od tego, czy7potrzebują map, sieci czy7 też wykresów kołowych.
Przedmowa
Podziękowania Dziękuję mojej żonie, Hajrze, za wsparcie, inspirację i baczne oko korektora nie zbędne podczas pisania książek tego rodzaju. Jestem wdzięczny także wydawnictwu Manning Publications za możliwość napi sania tej książki. Praca nad tą publikacją pozwoliła mi lepiej poznać bibliotekę D3. Dzięki napisaniu D3.js w akcji czuję się pewniejszy swoich umiejętności z zakresu D3, niż gdybym łydko rozwijał aplikacje przy użyciu tej biblioteld. Dziękuję zwłasz cza redaktorce, Susannie Kline, za cierpliwość i ciężką pracę nad przekształcaniem mojej prozy w7publikację wartą zakupu. Jestem wdzięczny także zespołowi produk cyjnemu i wszystkim innym pracownikom wydawnictwa Manning zajmującym się książką. Wymienieni poniżej recenzenci przekazywali mi uwagi na temat wstępnych wer sji książki na różnych etapach prac nad nią. Wszystkim tym osobom dziękuję za czas i wysiłek. Wspomnianymi recenzentami są: Prashanth Babu V V, Dwight Barry, Margiiet Bruggeman, Nikander Bruggeman, Matthew Faulkner, Jim Frohnhofer, Ntino Krampis, Andrea Mostosi, Arun Noronha, Alvin Raj, Adam Tolley i Stephen Wakely. Podziękowania należą się też redaktorowi technicznemu, Valentinowi Crettazowi, i korektorowi technicznemu, Jonowi Borgmanowi, którzy podzielili się ze mną swoją bogatą wiedzą. Dzięki nim książka stała się dużo bardziej wartościowa. Ponadto jestem wdzięczny bibliotece Uniwersytetu Stanforda i wszystkim jej pra cownikom, a zwłaszcza dyrektorowi, Milce’owi Kellerowi, za umożliwienie mi wyko rzystania biblioteki D3 w fantastycznych nowych badaniach i aplikacjach w ramach licznych ekscytujących projektów.
Podziękowania
O książce Ludzie interesujący się wizualizowaniem danych — i konkretnie biblioteką D3 — reprezentują trzy różne obszary. Pierwszym z nich jest tradycyjne programowanie stron internetowych, w7którym przyjmuje się, że D3 to biblioteka do tworzenia wykresów lub (rzadziej) do obsługi map. Drugim obszarem jest tradycyjne budowlanie opro gramowania (na przykład w7Javie), gdzie biblioteka D3 jest wykorzystywana do prze chodzenia do programowania w7standardzie HTML5. Ostatni obszar obejmuje analizę statystyczną wykonywaną za pomocą języka R, Pythona i aplikacji. We wszystkich tych dziedzinach biblioteka D3 wymaga zapoznania się z dwoma nowościami — współczesnymi technikami programowania stron i wizualizowaniem danych. W książce omawiam związane z tymi zagadnieniami aspekt}7dające czytelnikom podstawy wiedz}7w7obszarach, które mogą okazać się nowe i zaskakujące. Dla kogoś świetnie posługującego się JavaScriptem niektóre z opisywanych tematów (na przy kład łączenie wywołań funkcji w7łańcuch) mogą być znane. Dla innych osób, dobrze radzących sobie z wizualizowaniem danych, ogólne informacje z tej dziedziny, doty czące na przykład prostych elementów7graficznych, nie będą niczym nowym. Choć przedstawiam wprowadzenie do biblioteki D3, koncentruję się głównie na kompletnym omówieniu podstawowych zasad z nią związanych. Niezależnie od tego, czy dopiero poznajesz tę bibliotekę, czy chcesz zrozumieć jej bardziej zaaw7ansow7ane aspekty, znajdziesz tu narzędzia potrzebne do opracowania dowolnych wizualizacji danych.
Zawartość książki Książka jest podzielona na trzy części. W pierwszych trzech rozdziałach znajdziesz podstawy biblioteki D3. Opisane są tu różne techniki wiązania danych, ich wczyty wania i tworzenia elementów7graficznych na ich podstawie. Omawiam też skale, kolory i inne ważne aspekt}7wizualizowania danych, które to zagadnienia mogą Ci być już dobrze znane. W tych rozdziałach przedstawiam też podstawowe technologie wyko rzystywane w7bibliotece D3, na przykład JavaScript, CSS i SVG. W pięciu dalszych rozdziałach biblioteka D3 używana jest w7typowy dla niej spo sób. Rozdział 4. dotycz}7tworzenia na podstawie danych prostej grafiki (na przykład wykresów liniowych, linii i wykresów skrzynkowych). W rozdziale 5. dokładnie opi sano różne tradycyjne układy stosowane w wizualizowaniu danych — wykresy kołowe, układy drzewiaste i chmury słów. Rozdział 6. jest poświęcony wizualizowaniu sieci. Może się to wydawać egzotycznym zagadnieniem, jednak wizualizacja sieci jest stosow7ana coraz częściej w7 różnych dziedzinach. Rozdział 7. dotyczy bogatych możliwości
14
O książce
biblioteki D3 w zakresie obsługi map. Dowiesz się tutaj na przykład, jak wykorzystać format TopoJSON do przeprowadzania ciekawych manipulacji na danych geogra ficznych w przeglądarce. W rozdziale S. opisano manipulowanie tradycyjnymi ele mentami HTML-a, na przykład akapitami i listami. To pokazuje, że biblioteka D3 współdziała nie tylko z formatem SVG. Cztery ostatnie rozdziały są poświęcone zaawTansowanym zagadnieniom związanym z biblioteką D3. Odkryłem, że każdy z tych obszarów jest ważny w mojej praktycznej pracy. W tych rozdziałach poznasz zasady tworzenia własnego panelu kontrolnego dla danych, nauczysz się tworzyć własne układy i komponent}7biblioteki D3, opty malizować proces wizualizowania dużych zbiorów7 danych i pisać kod do wizualizo wania danych w7urządzeniach przenośnych. Nawet jeśli nigdy nie będziesz używał biblioteki D3 do wykonywania takich zadań, w każdym z końcowych rozdziałów7mo żesz zapoznać się z ważnymi aspektami posługiwania się tymi narzędziem.
Jak korzystać z książki? Jeśli dopiero zaczynasz pracę z biblioteką D3, zalecam zapoznanie się po kolei z roz działami od 1. do 4. W każdym z nich wykorzystano wiedzę z wcześniejszych roz działów7 i opisano podstaw7ow7e zasady nie tylko korzystania z biblioteki D3, ale też z obszaru wizualizow7ania danych. Dalsza lektura zależ}7od tego, do czego chcesz uży wać biblioteki. Jeśli korzystasz głównie z danych geograficznych, możesz przejść bezpośrednio do rozdziału 7. W sytuacji gdy posługujesz się przede wszystkim danymi o sieci, możesz przeskoczyć do rozdziału 6. Jeśli zajmujesz się wizualizowaniem tra dycyjnych danych, zalecam zapoznanie się z rozdziałami 5. i 9. Pozwalają one zacząć posługiwać się panelami kontrolnymi, będącymi ważnym komponentem tradycyjnych technik wizualizowania danych. Jeśli masz już pewne doświadczenie w7używaniu biblioteki D3 i chcesz rozwinąć sw7oje umiejętności, zachęcam do szybkiego przejrzenia trzech pierwszych rozdziałów7. Ciekaw7e informacje możesz znaleźć w7rozdziale 3., gdzie opisane są kolory i wczytywanie zewnętrznych zasobów7(na przykład ikon w7formacie SVG i materiałów HTML-owych). Interesujące może okazać się też omówienie generatorów7i komponentów7w7rozdziale 4. Zapoznanie się z nimi pozwoli uzupełnić braki w7znajomości tych często używanych, ale nieraz niedostatecznie rozumianych elementów7biblioteki D3. Dalsza lektura zależ}7 od tego, co uw7ażasz za sw7oje mocne strony i do czego chcesz używać tej biblioteki. Jeśli zamierzasz rozwinąć sw7oją wiedzę z zakresu tradycyjnego wizualizowania danych, przeczytaj rozdział 5., gdzie opisane są układy, a następnie zajrzyj do rozdziału 9., gdzie omówione są panele kontrolne. Prawdopodobnie wiele zagadnień z tych roz działów7 będzie Ci znanych, znajdziesz tu jednak dogłębne omówienie różnych tema tów7. Następnie przejdź do rozdziału 11. i sprawdź, czy znajdziesz w7nim techniki opty malizacji, które zechcesz zastosować w7 wizualizowaniu danych. Możesz też zajrzeć do rozdziału 8. i zastanowić się nad tym, jak wykorzystać znane Ci sztuczki związane z biblioteką D3 do budow7ania elementów7interfejsu uż}7tkow7nika i tradycyjnych stron internetowych.
O książce
15
Wiele znaczących treści kryje się w rozdziałach 6. i 7., gdzie szczegółowo opisano wykorzystanie biblioteki D3 w dwóch istotnych obszarach wizualizowania danych — związanych z sieciami i mapami. Ponadto omówione w7 rozdziałach 8. i 11. stosowa nie elementu canvas ze standardu HTML5 to zagadnienie, z którym nawet doświad czeni użytkownicy biblio teki D3 mogą nie być obeznani. Bez względu na to, jakie masz doświadczenie w7korzystaniu z biblioteki D3, zachę cam Cię do zapoznania się z rozdziałem 10. Znajdziesz w7nim opis struktury układów i komponentów7oraz dowiesz się, jak budować własne obiekty7tego rodzaju. Budowanie modułowych komponentów7i układów7przeznaczonych do wielokrotnego użytku pozwoli Ci nie tylko przygotowywać trafne wizualizacje danych, ale też ułatwi Ci karierę w7tej dziedzinie.
Grafika w internecie Większość grafiki przedstawionej w7tej książce jest generowana w7kolorze i powinna być oglądana w7postaci barwnej. Wydanie elektroniczne książki zawiera kolorową grafikę, natomiast w formie drukowanej rysunki zaprezentowane są w7skali szarości. Mniej w ięcej jed n a trzecia rysunków z książki jest dostępna pod adresem ftp://ftp.helion.pl/przyklady/cl3jsak.zip. Aby7wyświetlić tę grafikę i użyły7do jej wyge nerowania kod, poszukaj ikony7[ 3 pod odpowiednimi rysunkami. Konwencje stosowane w kodzie Początkowy7przykładowy7kod w7rozdziałach jest prezentowany w7kompletnej postaci. Dalsze listingi, będące rozwinięciem pieiwotnego przy7kładu, obejmują ty7lko zmodyfi kowane fragmenty7kodu. W trakcie lektury najlepiej posługiwać się kodem źródłowym i przykładami dostępnymi w7internecie. Długość wierszy w7niektórych fragmentach kodu przeinacza szerokość strony7. W takich sytuacjach używany jest symbol oznaczający7, że wiersz został zawinięty7. Cały7kod źródłowy7na listingach i w7tekście jest zapisany7czcionką o sta łe j szero ^►kości znaków, co pozw7ala odróżnić go od zwy7kłego tekstu. Przy7wielu listingach znajdziesz uw7agi do kodu, opisujące w7ażne zagadnienia. Pobieranie kodu źródłowego Kod źródłowy7 z przy7kładami z tej książki jest dostępny7w7witry7nie wydawnictwa Manning pod adresem http://www.manning.com/D3.jsinAction. Spolszczoną w7ersję kodu możesz pobrać z serwera FTP wydawnictwa Helion, pod adresem ftp://ftp. helion, pl/przyklady/dojsak.zip. Wymagania sprzętowe Biblioteka D3.js wymaga do działania przeglądarki. Powinieneś też zainstalować lokalny7 seiwer WWW przeznaczony7na kod.
16
O książce
Część I Podstawy biblioteki D3.js
T
J L rzy pierwsze rozdziały zawierają wprowadzenie do podstaw biblioteki D3 i pozwalają zacząć tworzyć elementy graficzne w formacie SVG na podstawie danych. Rozdział 1. pokazuje, jak biblioteka D3 jest powiązana z technologiami DOM, HTML, CSS i JavaScript. Znajdziesz tu kilka przykładów7 ilustrujących, jak używać tej biblioteki do tworzenia elementów7stron internetowych. Rozdział 2. dotyczy7wczy tywania, analizow7ania, przetwarzania i mod\7fikow7ania danych w7 ramach przy7gotow7ań do ich wizualizacji. Służą do tego różne funkcje biblioteki D3 przeznaczone do manipulowania danymi. W rozdziale 3. przejdziesz do projektowania i dowiesz się, jak używać funkcji związanych z kolorami, pozwalających lepiej wizualizować dane. Zobaczysz też, jak wczytywać zewnętrzne elementy — na przyddad kod modalnych okien dialogowych w HTML-u lub ikony w formatach rastrowych i wektorowych. Część I pokazuje, w7jaki sposób można wczytywać, przetwarzać i wizualnie przed stawiać dane w7formacie SVG bez polegania na wbudowanych układach lub kompo nentach. Te umiejętności są niezbędne do używania i rozbudowywania dostępnych układów7i komponentów7.
Wprowadzenie do biblioteki D3.js
Zawartość rozdziału: ■ Podstaw y te ch n o lo g ii HTML, CSS i DOM (ang. D ocum ent O bject Model) ■ Z asady działania fo rm a tu SVG (ang. Scalable Vector
Graphics) ■ W iązanie i selekcja danych w b ibliotece D3 ■ Różne ty p y danych i te c h n ik i ich w izualizo w an ia
Uwaga dla czytelników wydania drukowanego — liczne ilustracje z tej książki są przeznaczone do oglądania w kolorze. Pod ailresem ftp://ftp.helion.pl/przyklady/d3jsak.zip znajdują się kolorowe wersje rysunków do pobrania; zalecam do nich zaglądać w trak cie lektury.
Nazwa D3 dotyczy dokumentów sterowanych danymi (ang. data-driven documents). Jest to nazwa produktu, ale też klasa aplikacji od lat dostępnych w różnych posta ciach w intemecie. Już od dłuższego czasu programiści tworzą i stosują dokumenty7 sterowane danymi, na przyldad interaktywne panele kontrolne, bogate aplikacje inter netowe i strony o dynamicznej zawartości. Dlatego z jednej strony7biblioteka D3.js to ty7lko kolejny7krok \v procesie rozwoju technologii dla dokumentów sterowanych danymi, z drugiej strony7jednak jest to krok bardzo duży7.
20
R o z d z ia ł 1. Wprowadzenie do biblioteki D3.js
1.1- Czym jest D3.js? D3.js utworzono, aby zaspokoić wielką potrzebę tworzenia możliwych do udostępnia nia w intemecie zaawansowanych wizualizacji danych. Dzięki solidnemu projektowi biblioteka ta nie ogranicza się do generowania wykresów. To dobrze, ponieważ określe nie wizualizacja danych nie dotyczy już tylko wykresów kołowych i liniowych. Obecnie obejmuje też mapy, interaktywne diagramy i inne narzędzia oraz materiały integro wane z artykułami, panele kontrolne dla danych, raporty i wiele innych elementów pojawiających się w7intemecie. Twórca biblioteki D3.js, Mike Bostock, pomagał w pracach nad wcześniejszą biblio teką do wizualizowania danych, Protovis. Jest też autorem Polymaps — biblioteki JavaScriptu służącej do tworzenia prostych map z wykorzystaniem grafiki wektorowej i kafelków7. Te wcześniejsze projekt}7pomogły w7rozwijaniu biblioteki D3.js, w7której skoncentrowano się na nowych standardach i przeglądarkach. Oto słowa Bostocka: „To podejście pozwala uniknąć konieczności stosowania zastrzeżonych reprezentacji i zapewnia niezwykłą sw7obodę oraz dostęp do wszystkich możliwości standardów7 internetowych takich jak CSS3, HTML i SVG (http://d3js.org/). Na tym polega prze łomowy charakter omawianej biblioteki. Choć nie działa ona w7przeglądarce Internet Explorer 6, powszechna obsługa standardów7w7nowych przeglądarkach pozwala progra mistom stron internetowych sw7obodnie udostępniać dynamiczne i interaktywne treści. Do niedawna nie dało się budować wydajnych i bogatych aplikacji internetowych działających w7przeglądarce, jeśli nie zastosowało się technologii Flash lub apletów7 Javy. Z tego powodu Flash i Java nadal są wykorzystywane w7intemecie — zwłaszcza do tworzenia wewnętrznych aplikacji sieciowych. Biblioteka D3.js zapewnia tę samą wydajność, ale jest zintegrowana ze standardami internetowymi i modelem DOM (ang. Document Object Model) dla HTML-a. Biblioteka D3 pozwala programistom tworzyć na podstawie danych bogate interaktywne i animowane materiały oraz łączyć je z istnieją cymi elementami stron internetowych. Powstaje w7ten sposób narzędzie do budow7ania wydajnych paneli kontrolnych dla danych i generowania zaawansowanych wizualizacji danych, a także do dynamicznego aktualizowania tradycyjnych materiałów7w intemecie. Jednak rozpoczęcie pracy z biblioteką D3 nie jest łatwe, ponieważ programiści często oczekują, że jest ona prostą biblioteką do tworzenia wykresów. Jest to błędne myślenie, czego dowodem są wykresy kołowe. Z rozdziału 5. dowiesz się, że biblioteka D3 nie udostępnia jednej funkcji do tworzenia takich wykresów7. Zamiast tego używana jest funkcja przetwarzająca zbiór danych i generująca odpowiednie kąty. Dlatego jeśli przekażesz zbiór danych do funkcji arc biblioteki D3, uzyskasz kod potrzebny do otrzymania tych kątów7na rysunku. Ponadto trzeba zastosować dodatkową funkcję, by utworzyć potrzebne ścieżki. Ten proces jest znacznie dłuższy niż w7wyspecjalizowa nych bibliotekach do generowania wykresów, co jednak ma też pewne zalety. Choć inne biblioteki do generowania wykresów pozwalają wygodnie tworzyć wykresy linio we i kołowe, okazują się niewystarczające, gdy chcesz zrobić coś innego. Biblioteka D3 pozwala uzyskać na podstawie danych dowolne grafiki i interaktywne elementy. To dlatego właśnie tę bibliotekę wykorzystano do opracowania najbardziej innowa cyjnych i najciekawszych wizualizacji dostępnych obecnie w7intemecie.
1.2. Jak działa biblioteka D3?
21
1.2. Jak działa biblioteka D3? Przyjrzyj się teraz zasadom wizualizowania danych, a także ogólnemu działaniu biblio teki D3. Na rysunku 1.1 przedstawiony jest ogólny schemat rozpoczynania pracy z danymi i używania biblioteki D3 do ich przetwarzania oraz reprezentowania. Można też dodać element}7interaktywne i zoptymalizować wizualizację. W początkowej czę ści rozdziału poznasz zasady selekcji i wiązania danych w7bibliotece D3. Dowiesz się też, jak biblioteka współdziała z formatem SVG i modelem DOM. Następnie poznasz często używane typy danych. W końcowej części wykorzystasz bibliotekę D3 do utwo rzenia prostych elementów modelu DOM i grafiki w7formacie SVG. Dane? 01101011
Wczytywanie danych? -•— (rozdziały 2. i 3.)
Ustrukturyzowane dane?
00011101 11011010
01010101
Generowanie -► zbioru danych (rozdział 11.)
Interaktywność (rozdział 2.)
d Zdarzenia związane z myszą (rozdziały od 2. do 12.)
R ysu n e k 1.1. Mapa pokazująca opisywany w książce proces wizualizowania danych za pomocą biblioteki D3.js. Zacznij od danych, a następnie w zależności od typu używanych danych i potrzeb wybierz odpowiednią ścieżkę
22
R o z d z i a ł 1.
Wprowadzenie do biblioteki D3.js
1.2.1. W wizualizacji danych ważne są nie tylko aspekty wizualne
Możesz sądzić, że wizualizowanie danych to tylko tworzenie wykresów kołowych i linio wych oraz stosowanie różnych metod generowania diagramów spopularyzowanych przez Tufte a i stosowanych przez naukowców. Ta dziedzina jednak jest o wiele bogatsza. Jedną z głównych zalet biblioteki D3.js jest wszechstronność. Biblioteka umożliwia stosowanie grafiki wektorowej na tradycyjnych wykresach, generowanie wizualizacji geoprzestrzennych i wizualizacji sieci, a także tworzenie tradycyjnych elementów HTML-a (na przykład tabel, Ust i akapitów). To uniwersalne podejście do wizualizo wania danych, w którym mapa, graf sieci lub tabela są różnymi reprezentacjami danych, stanowi ważny aspekt sprawiający, że biblioteka D3.js jest tak atrakcyjnym narzę dziem do budowania aplikacji. Rysunki od 1.2 do 1.8 przedstawiają wizualizacje danych wygenerowane przeze mnie za pomocą biblioteki D3. Znajdziesz tu mapy i sieci, a także bardziej tradycyjne wykresy kołowe i zupełnie niestandardowe układy wizualiz: do konkretnych potrzeb moich klientów.
$
■ 'uqucr uc
,isVc£is
P h i^ ^ ^ h ia
Phoenix
San Jose
Denver ( khihoma City
I.o n g B cach
Seattle
Austin
l.osAngtks
D etro it
i resn o
sa;Tamcii/(>> (
fueson
Virg^^^eachFo^^^rth
• A
)
s.ir. D i<.;:<»
W ,^ ® ro n M ilw a u k e e
I n
A
p
- l
( olumbes
KaQitySan£isco
S a n A n t o n i,
jaL-bopillc Nf
#
Yo:k
1 .2 . B ibliotekę D3 m ożna so w a ć do tw orzenia prostych iagram ów . Rysunek o b e jm u je wiele w ykresów kołowych (om ów ionych w rozdziale 5.) obrazujących różnice w j ^ zy ku stosow anym do opisyw ania nat ur y w planach dużych m iast Stanów Zjednoczonych (w ykres pochodzi *
^ / / d t y n a t U r ę .
stanford.edu). Każdy wykres pokazuje
stosunek zwrotów dotyczących parków i otw artych przestrzeni (kolor zielony) do okre śle ń związanych z teren am i ^ T a n a c ' ^ ^ 10"
Choć mechanizm)7tworzenia bogatej i zróżnicowanej grafiki są jedną z zalet biblioteki D3, ważniejsza w kontekście programowania nowoczesnych stron internetowych jest możliwość zapewniania wysokiego poziomu interaktywności oczekiwanego przez użytkowników. Dzięki bibliotece D3 każdy element wykresu — od kręcącej się kuli ziemskiej po wąski kawałek wykresu kołowego — jest równie interaktywny. A ponie waż biblioteka D3 została opracowana przez osobę o dużym doświadczeniu w wizu alizowaniu danych, obejmuje liczne interakty^wne komponenty' i mechanizmy' będące standardem w świecie wizualizowania dany ch i programowania stron internetowych. Nie po to poświęcasz czas na poznawanie biblioteki D3, by umieszczać na stro nach wykresy' wyglądające jak z Excela. Do tego wystarczą inne, wygodniejsze biblio teki. D3 poznaje się po to, by móc zastosować niemal każdą z ważnych technik wizualizow^ania danych. Za pomocą biblioteki D3 można też tworzy'ć własne techniki, co nie jest możliwe w większości innych narzędzi.
1.2. Jak działa biblioteka D3?
R y s u n e k 1 .3 . Biblioteka D3 pozwala też tworzyć mapy ja k pokazana na rysunku mapa składu etnicznego Zjednoczonych
23
(zobacz rozdział 7.), takie obszarów m iejskich Stanów
R y s u n e k 1 .4 . Mapy w bibliotece D3 to nie tylko tradycyjne mapy w odwzorowaniu Merkatora. Można też tworzyć in te ra ktyw n e kule, takie ja k mapa obrazująca przebieg podwodnych kabli kom unikacyjnych, i inne nietypowe mapy (zobacz rozdział 7.)
24
R o z d z i a ł 1.
P'
$r£
/
Wprowadzenie do biblioteki D3.js
V V-
U..
F <‘tA
A XIA#
V V ';> A
'
>
*.
4
V
\
'
,
x<Ć>-
R y s u n e k 1 .5 Biblioteka D3 posiada też funkcje tw orzenia ¡ntetafifctfWnych w izualizacji sieci (zobacz rozdział 6.). Tu przedstawiona je s t sieć powiązań spo ł^n^ę m K w sp óła utorstw a artykułów dotycząca archeologów pracujących przez prawie 25 lat n a ^ id ta a m y c h wykopaliskach O accounts b u t that
O at*vaocc search u sed to bc^xrttCL. \ ^ ~ yt(c^ n e e >elsew here in schoU ship co and o ff h e w eb to find title s
digitized collections su ch as uri
w h ere they take m e.
G o o g le O
O
google n g o m s
O
is h a d to use
O d a u b to c , I d en t g et good ac c e ss to this type o f m aterial Books O
project h ad proceeded--or som e sim i a r m echanism for digitizing all books
O sc a n all textbooks and older scien c e b o oks and m ake available a n th e w eb
R y s u n e k 1 .6 . D3 obejm uje bibliotekę często stosowanych układów wizualizacji danych. Jednym z nich je s t opisany w rozdziale 5. dendrogram, pozwalający przedstawiać dane takie ja k pokazane na rysunku drzewo słów
1.2. Jak działa biblioteka D3?
25
R y s u n e k 1 .7 . B iblioteka D3 udostępnia liczne fu n k c je rysow ania elem entów w form acie SVG (zobacz rozdział 4 .). Dzięki tem u można tworzyć własne niestandardowe reprezentacje, takie ja k pokazany tu zapis nut
08AM 12PM 04PM 08PM R y s u n e k 1.8 . Można łączyć układy i fun kcje, by tw orzyć panele kontrolne danych, co opisano w rozdziale 9. Dostępne są też funkcje rysowania, za pomocą których można generować wyjątkowe w ykresy słupkowe — na przykład w odręcznym stylu pokazanym na rysunku
Więcej przykładów pokazujących różnorodność technik wizualizowania danych dostęp nych dzięki bibliotece D3 znajdziesz w7obejmującej ponad 2000 przykładów7galerii Christophe'a Viaua — http://christopheviau.com/d3list/gallery.html. Biblioteka D3.js wymaga rezygnacji z obsługi dawno przestarzałych przeglądarek. Dzięki temu programiści nie tylko mogą budow7ać bogate interaktywne aplikacje, ale też nadawać im styl znany z tradycyjnych stron internetowych i udostępniać w7podobny sposób. Takie aplikacje są bardziej przenośne, lepiej dostosowane do rosnącego inter ne tu z powiązanymi danymi i łatwiejsze do konseiwacji w7dużych zespołach. Bostock zdecydował się potraktować dane w7uniwersalny sposób, dlatego biblioteka D3 pozwala prezentować mapy równie łatwo jak wykresy, sieci lub listy7uporządkowane.
26
R o z d z ia ł 1. Wprowadzenie do biblioteki D3.js
To oznacza, że programiści nie muszą poznawać jednych abstrakcji i składni dla map, innych — dla dynamicznego tekstu i jeszcze innych — do wizualizowania danych. Kod służący do interaktywnego uruchamiania układu dla sieci opartego na siłach jest bardzo podobny do czystego JavaScriptu i do kodu reprezentującego dynamiczne punkty POI na mapie z biblioteki D3.js. Nie tylko używane metody są takie same. Ponadto można stosować te same dane, przedstawione w identyczny sposób na potrzeby list, akapitów i elementów span, a w7inny — dla reprezentacji geoprzestrzennej. Dokumenty sterowane danymi to obszerna kategoria, a stanie się ona jeszcze pojemniejsza, gdy jako dane zacznie się traktować obrazy i tekst. 1.2.2. W bibliotece D3 istotne są selekcja i wiązanie danych
W tym rozdziale natrafisz na fragmenty kodu, które możesz uruchomić w przeglądarce, by zmienić wygląd elementów witryny. W końcowej części rozdziału znajduje się apli kacja napisana za pomocą biblioteki D3. Na jej przykładzie wyjaśnione są podstawy kodu pisanego w JavaScripcie. Najpieiw jednak zapoznaj się z zasadami programowania stron internetowych z wykorzystaniem biblioteki D3, a także ze wzorcem, z którym spotkasz się wielokrotnie — z selekcją. Wyobraź sobie zbiór danych z cenami i rozmiarami domów7oraz zestaw7elementów strony internetowej (graficznych lub tradycyjnych elementów
). Załóżmy, że programista chce przedstawić zbiór danych za pomocą tekstu lub wielkości i kolorów7. Selekcja to gmpa wszystkich elementów7. Na jednostkach z takiej grupy można wyko nywać różne operacje — przenosić elementy7, zmieniać ich kolor lub aktualizować war tości pochodzące z danych. Operacje na danych i elementach strony wykonuje się osobno, jednak prawdziwa wartość biblioteki D3 wynika z możliwości zastosowania selekcji do łączenia danych z elementami strony. Oto selekcja, która nie obejmuje żadnych danych: d3.selectAll("circle.an).styleC fill". "red").attr("cx". 100): Ten kod pobiera ze strony7wszystkie koła o klasie "a ", wypełnia je kolorem i przenosi w7taki sposób, byTich środek znajdował się o 100 pikseli na prawo od lewej kraw ędzi płótna