Wykresy

Wykresy i wizualizacja danych to naturalna i bardzo ważna część pracy badawczej, zarówno podczas fazy analizowania, jak i powstawani ostatecznego rezultatu - wykresy są bardzo często najważniejszą częścią publikacji lub prezentacji. Biblioteki graficzne powinny więc mieć możliwość zarówno wydajnego, dynamicznego i możliwie interaktywnego tworzenia wykresów w pierwszej części, ale także dawać bogate opcje typów wykresów i możliwości precyzyjnego sterowania wszystkimi opcjami (czcionkami, rozmiarami, kolorami) i produkowania grafiki o jakości i wymaganiach potrzebnych do publikacji.

Julia ma szereg bibliotek służących do tworzenia wykresów. Między innymi są to:

  • Plots - metapakiet pozwalający stosować wspólną składnię dla szeregu backendów, prawdodobnie najpopularniejszy wybór

  • GR / GRUtils - frontend Julii do biblioteki GR napisanej w C (domyślny backend Plots)

  • Gaston - frontend dla GNUPlota

  • Gadfly - biblioteka używająca składni gramatyki grafiki, napisana w Julii, bazująca jeżeli chodzi o składnię, na ggplot2 (popularny pakiet dla R)

  • Vega/VegaLite - podobne filozofia jak wyżej, ale jest to frontend dla biblioteki w JS

  • Plotly/PlotlyJS - wrapper dla biblioteki plot.ly

  • PythonPlot - nakładka dla pythonowskiej biblioteki matplotlib (woła pythona)

Szereg z wymienionych bibliotek (GR, Gaston, PythonPlot) można używać w charakterze backendu w ramach Plots, ale równie dobrze bez tej nakładki. Kilka innych (PGFPlotsX, InspectDR, UnicodePlots), które choć oferują unikalne cechy, prawdopodobnie najcześciej nie są używane samodzielnie, lecz głównie jako backend dla biblioteki Plots.

Wydajność (szybkość) w dużej mierze zależy od tego czy biblioteka jest natywna (w Julii), czy jest wrapperem i jeśli tak, to dla jakiego języka (np. C będzie bardzo szybkie, Python - wolny). Ale wiele zależy też od samej biblioteki i bogactwa wykresu oraz sposobu jego tworzenia i optymalizacji. W poprzedniej wersji tego dokumentu, z roku 2022, umieszczałem wykres pokazujący czas potrzebny na wykonanie pierwszego wykresu w danej bibliotece (cena kompilacji), oraz średni czas tworzenia następnych. Od tej pory nastąpiły znaczące zmiany w samej Julii, ale i bibliotekach i wykres stracił aktualność. Pauza jest najczęściej już na tyle krótka, że przestała być irytująca (w niektórych przypadkach bywało to 30 sekund) i straciła na znaczeniu (różnica pomiędzy sekundą, a dwiema nie jest tak zauważalna). W tej sytuacji ważniejsze wydają się inne czynniki, czyli możliwości bibliotek opisane we wstępie, oraz indywidualne preferencje co do składni, filozofii i tym podobnych.

Aby mieć jakiś ciekawszy wybór bardziej szczegółowo omówimy trzy biblioteki.

  1. GRUtils

  2. Plots

  3. Makie

W mojej całkowicie subiektywnej ocenie te biblioteki i ich backendy, które używam, używałem lub testowałem, oceniłbym następująco w różnych kategoriach:

  • szybkość, to przede wszystkim czas do pierwszego wykresu, ale też późniejsze generowanie (istotne przy analizie interaktywnej),

  • uroda, to ogólna estetyka wykresów w ich domyślnej postaci (0 - neutralna), istotne przy szybkim tworzeniu wykresów do podglądu danych, czy ich prezentacji

  • interaktywność, oceniam czy wykres ma informacje o danych po najechaniu kursorem, możliwości powiększania, przewijania itd., przydatne przy analizie danych

  • możliwości, to głównie możliwości zmian poszczególnych elementów wykresu i dopasowywania ich do indywidualnych potrzeb, także dostępność różnych typów wykresów

  • publikacje, czy biblioteka nadaje się do tworzenia wykresów o jakości potrzebnej do publikacji, raportów itp.

BibliotekaSzybkośćUrodaInteraktywnośćMożliwościPublikacje
GR/GRUtils+0niemałenie
Plots (GR)++niedużetak
Plots (PlotlyJS)-0takmałenie
Plots (Gaston)+-częściowamałenie
Plots (InspectDR)+- -takmałenie
Makie (Cairo)-+niedużetak
Makie (GL)-+dużadużenie
CC BY-SA 4.0 Krzysztof Miernik. Last modified: November 22, 2024. Website built with Franklin.jl and the Julia programming language.