Trellis Chart aka Small Multiple aka Panel Chart - jak zamieścić dużo wykresów na jednym i się nie pogubić

Trellis chart (zwany także small multiple, panel chart lub lattice chart) to koncept stworzony przedz Edwarda Tufte. Jeśli interesujecie się wizualizacją danych, to na pewno wiece kto to. Trellis chart już pojawił się na blogu we wpisie o radar charts w kontekście global competetiveness index. Został tam wykorzystany do porównania wykresów różnych krajów. Do tego właśnie służy. Trellis chart to tak naprawdę tabela pokazująca kilka podobnych wykresów. Celem jest możliwość łatwego i szybkiego odczytania różnych wskaźników, lub porównania ich. Jak więc stworzyć coś takiego w Tableau?

Zacznijmy od tego, że użycie small multiple z niestandarowaymi wykresami, czyli takimi gdzie liczymy i rysujemy coś za pomocą współrzędnych, jest bardziej skomplikowane. Dlatego zaczniemy od prostszego przykładu.

Za pierwszy przykład posłuży nam moja wizualizacja z ostatniego MakeoverMonday, która trafiła również do galerii Tableau Public - US Household Annual Income Inequalities.
Kliknij aby przejsć do Tableau Public
Wykorzystałem tutaj nową funkcję Tableau 10.5, a mianowicie Viz In Tooltop, czyli po prostu pokazanie kolejnego wykresu w tooltipie. A skoro jest taki wykres, to przydałaby się i legenda. W 10.5 nie możemy posługiwać się legendą w tooltipie jak na zwykłym wykresie lub dashboardzie, więc legendę stworzyłem sam - jako oddzielny worksheet.


Trellis posłużył mi to organizacji legendy w dwa rzędy po 8 kolumn. Standardowo wykorzystujemy do tego 2 pola kalkulowane - jedno numerujące wiersze i drugie kolumny. A jak numerowanie, to oczywiście pojawia się funkcja INDEX().

Pierwsze pole, dla rzędów to prosta funkcja modulo:
INT(INDEX()%2)
Zwraca ona liczbę całkowitą z reszty dzielenia wartości funkcji INDEX() przez 2. Wybieramy 2, ponieważ ograniczamy się do dwóch rzędów. Drugie pole, bardziej skomplikowane, dla kolumn wygląda następująco:

IIF(INT(INDEX()/2)=INDEX()/2,
INT(INDEX()/2)-1,
INT(INDEX()/2))
Tym razem zamiast modulo używamy dzielenia, również przez liczbę rzędów. Ponowanie zaokrąglamy do najbliższej mniejszej liczby całkowitej. Funkcja warunkowa potrzebna jest nam aby rozwiązać problem, kiedy wynik jest już liczbą całkowitą - w takim przypadku pojawia się przesunięcie o jedną kolumnę w prawo.

Oba pola kalkulowane liczone są po polu Income Level - w końcu to je pokazujemy na legendzie.

Przyjrzymy sie teraz bardziej skomplikowanemu przykładowi, wariacji na temat tego samego zbioru danych. W tym przypadku nie korzystamy z domyślnych wykresów Tableau, lecz ręcznie rysujemy zagięte słupki (jak to zrobić w tym wpisie).

Kliknij aby przejsć do Tableau Public

W tym przypadku używamy podobnych kalkulacji. Dla rzędów jest to:
INT(INDEX()%13)
Oczywiście 10, bierze się stąd, że chcemy skończyć z 10 rzędami. W tym momencie wypada wspomnieć, że jeśli nie jesteśmy pewni jak chcemy zorganizować nasz Panel Chart to zawsze możemy użyć parametru i trochę poeksperymentować. Kalkulacja dla kolumn wygląda następująco:
IIF(INT((INDEX())/13)=(INDEX())/13, //jeśli index jest liczbą całkowitą
INT((INDEX())/13)-1, //przesuń o jeden w lewo
INT((INDEX())/13)) //inaczej zostaw
Jak widać po komentarzu w kodzie, schemat działania jest taki sam. To co chcę tutaj pokazać, to konfiguracja ustawień obu funkcji. Aby wszystkie punkty były na swoim miejscu, INDEX() musi być liczony po wszystkich polach użytych jako Detail, inaczej wykres się rozjeżdza. Oba pola musimy ustawić więc tak:


Tłumacząc na język polski: Liczimy na poziomie stanu, a grupując stan, poziom przychodu i ścieżkę (rysujemy po tym koło). Ważna jest kolejność w jakies ustawimy wymiary. Stosując analogię do LOD:
{FIXED [State], [Income Level], [Path]: INDEX()}
To oczywiśie nie zadziała, ponieważ Tableau nie pozwala na używanie table calculations wewnątrz LOD.

Mam nadzieję, że wpis się przyda, już niedługo część druga o zaginaniu słupków.

Komentarze

Popularne posty z tego bloga

Unicode - trzecia warstwa Tableau

Recenzja: Edward Tufte - The Visual Display of Quantitative Information

Interaktywne Grupowanie w Marimekko