#020 Diagram cięciw (ang. Chord diagram)

chord chart (wykres cięciw)

Diagram cięciw (ang. chord diagram) to metoda wizualizacji pokazująca wzajemne relacje między danymi w macierzy. Diagram cięciw zawdzięcza swoją nazwę terminologii używanej w geometrii. Jak wiesz cięciwa koła to odcinek linii geometrycznej, którego oba końce leżą na okręgu.

Dane są ułożone promieniście wokół okręgu, a relacje między punktami danych są zwykle rysowane jako łuki łączące dane (inaczej zwane krzywymi Béziera). Połączenia między podmiotami używane są do pokazania, że mają coś wspólnego. Dzięki temu diagram cięciw jest idealny do porównywania podobieństw w zestawie danych lub między różnymi grupami danych. Wartości przypisujemy do każdego połączenia, co jest proporcjonalnie reprezentowane przez rozmiar każdego łuku. Kolor może służyć do grupowania danych w różne kategorie, co pomaga w dokonywaniu porównań i rozróżnianiu grup.

Prawdziwym plusem przy tym wykresie jest interaktywność, dzięki której diagram cięciw jest bardziej zrozumiały. W bibliotece takiej jak plotly możesz najechać kursorem na określoną grupę, aby wyróżnić wszystkie jej połączenia.

Diagram cięciw przyciąga uwagę i jest dość popularny w wizualizacji danych dotyczących przepływów, szczególnie w badaniach migracji, przepływach ekonomicznych czy badaniach genomu.

Kod w python

W tym momencie (końcówka 2021) można znaleźć coraz więcej bibliotek ułatwiających stworzenie diagramu cięciw (chord diagram).

1. Holoviews

Najprostszym sposobem narysowania diagramu cięciw jest użycie elementu Chord z biblioteki holoview. Biblioteka ta korzysta z bokeh i matplotlib jako backendów. Poniższy przykład pochodzi z dokumentacji holoview. Reprezentuje związek między każdym bohaterem książki „Les misérables” („Nędznicy”).

import pandas as pd
import holoviews as hv
from holoviews import opts, dim
from bokeh.sampledata.les_mis import data

hv.extension('bokeh')
hv.output(size=200)

links = pd.DataFrame(data['links'])
print(links.head(3))
hv.Chord(links)
diagram cięciw (chord diagram) holoviews

Jak widzisz obrazek nie jest zbyt czytelny. Wczytajmy i dodajmy opisy.

nodes = hv.Dataset(pd.DataFrame(data['nodes']), 'index')
nodes.data.head()
chord = hv.Chord((links, nodes))
chord.opts(
    opts.Chord(cmap='Category20', edge_cmap='Category20', edge_color=dim('source').str(), 
               labels='name', node_color=dim('index').str()))
diagram cięciw (chord diagram)

Uwaga! Bardzo częstym błedem w tego rodzajach wykresu jest to, że staramy sie pokazać zbyt wiele rzeczy i zaciemniają one obraz. Spójrz o ile powyższa wizualizacja będzie bardziej przejrzysta, jeśli wyświetlimy tylko połączenia występujace wiecej niz 5 razy.

chord = hv.Chord((links, nodes)).select(value=(5, None))
chord.opts(
    opts.Chord(cmap='Category20', edge_cmap='Category20', edge_color=dim('source').str(), 
               labels='name', node_color=dim('index').str()))
diagram cięciw (chord diagram)
2. Plotapi

Drugą pomocną biblioteką w rysowaniu diagramu cięciw jest plotapi (niestety nie jest darmowa). Wystarczy, że zerkniesz do dokumentacji i zobaczysz, że również można stworzyć wykres kilkoma linijkami komend.

diagram cięciw (chord diagram) plotapi
3. Plotly

Plotly to potężna biblioteka Pythona do wizualizacji danych, która pozwala również budować diagram cięciw. Dobrą stroną jest to, że buduje interaktywne wykresy. Niestety aby stworzyć wykres, musisz napisać wiele lini kodu (PRZYKŁAD). Mam natomiast dużą nadzieję, ze w kolejnych wersjach ułatwią rysowanie tego rodzaju wykresów.

diagram cięciw (chord diagram) plotly

Życzę udanych wizualizacji!

Pozdrawiam z całego serducha,

podpis Mirek
.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.