Close
Bokeh – biblioteka (idealna) do tworzenia interaktywnych wykresów

Bokeh – biblioteka (idealna) do tworzenia interaktywnych wykresów

W ostatnim wpisie przedstawiającym analizę dotyczącą energii pozyskiwanej z odnawialnych źródeł energii po raz pierwszy użyłem biblioteki bokeh. W sumie był to prosty wykres przedstawiający szereg czasowy prezentujący godzinowy uzysk energii ze źródeł wiatrowych i fotowoltaicznych w 2022 roku. Ale przez te wykresy wpadłem [w bokeh] jak przysłowiowa śliwka w kompot, gdyż biblioteka ta stanowi niesamowite źródło możliwości dla tworzenia interaktywnych wykresów bez konieczności zakładania konta, bez używania API i bez dodatkowych ograniczeń jak to ma miejsce choćby w przypadku konkurencyjnej biblioteki plotly.

Bokeh – biblioteka interaktywnych wykresów

Zatem w tym wpisie część z tych możliwości biblioteki bokeh będę chciał przedstawić – tak, będzie to jedynie niewielka część – zwyczajnie nie sposób omówić jej w jednym wpisie. Zresztą ten wpis traktować trzeba jako wprowadzenie do zagadnienia. Chcących tworzyć interaktywne wykresy odsyłam do świetnie przygotowanej dokumentacji z mnóstwem przykładów.

Bokeh – instalacja

Bibliotekę bokeh do naszego systemu z Phyton trzeba doinstalować. Można to zrobić zarówno poprzez conda (wymaga uprzednio zainstalowanego środowiska Anaconda lub Miniconda) lub poprzez pip. Sam proces przebiega sprawnie, nie napotkałem żadnych problemów. Zresztą wydając polecenie bokeh info łatwo sprawdzimy czy wszystko jest w porządku i czy została biblioteka zainstalowana tak jak trzeba.

Bokeh – zaczynamy pracę

Po uruchomieniu środowiska np. Jupyter Notebook możemy przystąpić do pracy. Nasza praca będzie polegała na tworzeniu interaktywnego wykresu poprzez dodawanie do budowanej struktury bloków kodu. Każdy taki blok utożsamiać można z kolejną warstwą nakładaną na tworzony wykres. W terminologii bokeh taki blok określany jest jako „glyphs” i dodawany jest to obiektu „figure”. Stąd na początek musimy wczytać klasę figure z modułu bokeh.plotting, za pomocą której następnie utworzona zostanie instancja obiektu pod nasz interaktywny wykres. Do tego określimy jeszcze miejsce gdzie będziemy chcieli opublikować nasz wykres poprzez wczytanie funkcji output_notebook lub output_file z modułu bokeh.io. Pierwsza z nich określa jako docelowe miejsce komórkę notatnika, z kolei druga funkcja zapisuje wykres do zewnętrznego pliku HTML.

from bokeh.plotting import figure, show
from bokeh.io import output_notebook, output_file

Zaczniemy od tej pierwszej wersji i jako miejsce docelowe określę komórkę notatnika.

output_notebook()

Kolejny krok to będzie określenie obszaru tworzonego wykresu poprzez utworzenie obiektu figure() i jego ukazanie metodą show()

img = figure()
show(img)

W ten sposób utworzone zostało „puste” podłoże wykresu,

na które nakładać będziemy warstwy tworzone przez metody „glyphs” 

Jak widać tych metod jest dość sporo. Kazda z nich pozwala nam utworzyć inną postać dla prezentacji zależności – także warto zapoznać się z nimi.

Zanim jednak cokolwiek na tej warstwie się pojawi to już sam obszar pod wykres możemy konfigurować poprzez szereg parametrów, które albo są dziedziczone z pokrewnych obiektów lub dedykowane właśnie dla obiektu figure.

Spójrzmy zresztą na przykład dla wykresu przedstawiającego wspomnianą ilość energii wytwarzanej ze źródeł fotowoltaicznych w Polsce w 2022 roku.  Z parametrów dedykowanych użyłem tools dla określenia rodzajów narzędzi w pasku oraz x_axis_type dla określenia typu osi x jako oś czasu. Z parametrów dziedziczonych title dla określenia tytułu wykresu oraz toolbar dla określenia położenia paska narzędzi.

img = figure(title=fig_name, x_axis_type="datetime", tools = ‘pan,wheel_zoom,box_zoom,reset', toolbar_location='below' )

Ok, do obszaru wykresu wprowadzimy teraz pierwszą warstwę. Będzie to warstwa typu line kreśląca zależność liniową.

img.line(df.index,df['Generacja źródeł fotowoltaicznych'],color=’green’,line_width=1)

Rezultat jest następujący:

Teraz dołożymy kolejna warstwę, będzie to tym razem linia przedstawiająca ilość energii wytwarzanej ze źródeł wiatrowych w Polsce w 2022 roku.

line_pv = img.line(df.index, df['Generacja źródeł fotowoltaicznych'], color='green', line_width=1, legend_label='Generacja ze źródeł fotowoltaicznych')
line_wind = img.line(df.index, df['Generacja źródeł wiatrowych'], color='orange', line_width=1, legend_label='Generacja ze źródeł wiatrowych')

I w taki oto sposób możemy dokładać kolejne warstwy tworząc coraz bardziej wyrafinowany interaktywny wykres. No właśnie interaktywny, biblioteka bokeh przychodzi z szeregiem różnych narzędzi. Część z nich mieliśmy okazję poznać korzystając z paska narzędzi przyłączonego do każdego z wykresu.

Nie są to jednak wszystkie narzędzia. Generalnie narzędzia w bokeh możemy podzielić na cztery grupy. Są to tzw. narzędzia-gesty (ciągnięcie, skrolowanie, klikanie), narzędzia-akcje (w trybie modalnym, takie jak ResetTool czy ExamineTool), narzędzia-informatorzy (przekazujące informacje, takie jak HoverTool czy CrossairTool) czy narzędzia-edytorzy, którzy wykonują zaawansowane operacje na warstwach stanowiące zazwyczaj połączony zbiór gestów.

Przypatrzmy się np. narzędziu HoverTool. Za pomocą metody add_tool dodajemy go do kodu wykresu.

I na koniec przedstawię łatwość tworzenia wykresów ze sobą powiązanych. W tym celu w bibliotece bokeh zaimplementowano moduł bokeh.layouts

Bibllioteka bokeh daje naprawdę spore możliwości i ich odkrywanie sprawia dużą przyjemność. Także każdemu, kto jest zainteresowany tworzeniem interaktywnych wykresów, dashboardów biblioteka bokeh z pewnością się przyda.

Odnośniki

[1]. Bokeh – dokumentacja

Jurand Bień

dr hab. inż., prof. Politechniki Częstochowskiej; zainteresowania: aspekty środowiskowe, gospodarowanie odpadami (praktyczne), danologia (hobbystycznie)

dr hab. inż., prof. Politechniki Częstochowskiej; zainteresowania: aspekty środowiskowe, gospodarowanie odpadami (praktyczne), danologia (hobbystycznie)

Leave a Reply

Your email address will not be published. Required fields are marked *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.