Rafał Ślusarz

 
 
 
 

GNUPLOT - podstawowe wykorzystanie


Celem tego mini-poradnika jest opanowanie umiejętności prezentacji danych z wykorzystaniem programu Gnuplot.

Słowa kluczowe: Gnuplot, przetwarzanie danych, modele matematyczne, wykresy

  1. Wprowadzenie
    Gnuplot jest przeznaczony do przetwarzania danych i ich prezentacji w formie dwu- i trójwymiarowych wykresów. Program Gnuplot jest programem darmowym i można go pobrać ze strony http://www.gnuplot.info/ (external link) .

  2. Uruchamianie programu Gnuplot
    Aby uruchomić program Gnuplot w terminalu tekstowym piszemy po prostu gnuplot i naciskamy ENTER. terminal powitalny Gnuplot-a

  3. Rysowanie prostych funkcji z zastosowaniem programu Gnuplot
    Po uruchomieniu programu Gnuplot w tym samym oknie terminala, w którym uruchomiliśmy program piszemy:

    plot sin(x)

    Pojawia się nowe okno z rysunkiem przedstawiającym wykres funkcji sinus:

    wykres funkcji sinus
    Możemy na jednym wykresie jednocześnie wyświetlić przebieg kilku funkcji (na jednym rysunku). W tym celu wydajemy polecenie:

    plot sin(x),cos(x),cos(x)*sin(x)

    Pojawia się wykres przebiegu funkcji sinus (kolor czerwony), funkcji kosinus(kolor zielony) i funkcji zdefiniowanej jako iloczyn funkcji sinus i kosinus (kolor niebieski):

    wielokrotnie złożony wykres

    Uwaga: kolory zmieniają się z wersjami programu Gnuplot. W wersji 5.4 p.2 trzy pierwsze kolory to magenta, green i cyan.
    Możemy nakreślić dowolną funkcję jednej zmiennej, jeśli tylko potrafimy ją zapisać. Z przykładów wiemy już jak zapisać funkcje trygonometryczne i jak wygląda znak mnożenia. Inne użyteczne znaki działań to:

    odejmowanie
    + dodawanie
    ** potęgowanie
    / dzielenie

    Inne użyteczne funkcje to:

    log - logarytm o podstawie dziesiętnej
    sqrt - pierwiastek kwadratowy

    Czyli np. funkcję logarytm dziesiętny z kwadratu zmiennej X zapisujemy tak:

    log(x**2)

    Czy potrafisz narysować przebieg zmienność następujących funkcji:

    cosinus kwadratu zmiennej X
    iloraz kwadratu zmiennej X i sinusa zmiennej X

  4. Rysowanie prostych funkcji trójwymiarowych

    Aby narysować funkcję dwu zmiennych, zamiast komendy plot używamy komendy splot

    splot -x**3-y

    Efekt takiej komendy możesz zobaczyć tutaj:

    wynik działania funkcji

  5. Wczytywanie i wizualizacja danych

    1. Prosty wykres
      Przy pomocy programu Gnuplot możemy zaprezentować dane, które mamy już wcześniej zapisane w postaci jakiegoś pliku. Aby wykonać to ćwiczenie stwórz plik o nazwie dane do swoim katalogu domowym.

      Plik dane:

      1      2
      2      3.5
      3      3.7
      4      5
      4.2    6.1
      5      8.5
      

      Następnie wczytaj dane zawarte w pliku dane do programu Gnuplot przy pomocy polecenia:

      plot 'dane'

      Efekt poprawnie wykonanego polecenia powinien wyglądać tak punkty zamiast wykresu
      Program Gnuplot posiada wiele opcji do zmiany wyglądu rysunku. Możemy np. zmienić wielkość wyświetlanych punktów. Zobacz jak zmieni się rysunek jesli wykonamy następujące komendy:

      plot 'dane' points 1
      plot 'dane' points 2
      plot 'dane' title 'Nasze dane'

      Inne style rysowania: (sprawdzaj, jak zmienia się styl reprezentacji danych)
      plot 'dane' w l
      plot 'dane' w l lt 3
      plot 'dane' w l lt 3 lw 4
      plot 'dane' w lp lt 4 lw 2 pt 5 ps 3

      Zastosowane "litery" to skróty od:
      w - with - "używając"
      l - lines - rysowanie za pomocą linii (domyślnie były rysowane tylko punkty pomiarowe: "points" (skrót: p)). Możesz też wypróbować "linespoints", "impulses", "boxes")
      lt - line type - typ linii; możesz poeksperymentować podając typ linii jako liczbę naturalną z zakresu 1-8
      lw - line wight - szerokość (grubość) linii
      lp - linespoints - rysowanie jednocześnie linii i punktów
      pt - point type - rodzaj rysowanych punktów; możesz poeksperymentować podając wartość pt z zakresu 1-8
      ps - point size - wielkość punktu

    2. Opisy wykresu
      Możemy dodać opisy osi np. w celu dodania opisów do obu osi wykonujemy następującą serię poleceń:
      set xlabel 'Nasze X-y'
      set ylabel 'Nasze Y-i'
      replot

      (replot - oznacz tu ponowne narysowanie tego, co rysowaliśmy ostatnio, używając polecenia plot; czyli zamiast ponownie wpisywać:
      plot 'dane' w lp lt 4 lw 2 pt 5 ps 3
      (co było naszym ostatnim poleceniem rysowania) wystarczy, że wpiszemy "replot"

      Możemy też dodać tytuł do naszego wykresu (1):
      set title "Przebieg zmienności"
      (to polecenie doda tytuł zapisany nad wykresem; aby tytuł był widoczny, należy wykres narysować jeszcze raz (pełnym poleceniem plot.... lub "replot"))

      Możemy też dodać opis do legendy (prawa strona, u góry wykresu (2)):
      plot 'dane' t 'pierwsza seria danych' w lp lt 4 lw 2 pt 5 ps 3
      zobacz rysunek: wyukres podpisany nagłówkiem i tytułem

      Możemy w końcu wyłączyć rysowanie osi z prawej strony i na górze wykresu:
      set border 3
      set xtics nomirror
      set ytics nomirror
      replot

      Efekt powinien być podobny do: ten sam wykres ae bez nadmiarowych osi

    3. Zapis wykresu do pliku
      Wykres jest bardzo ładny, jednak dobrze by było "zachować go sobie" do przyszłego użycia. Aby wyeksportować plik graficzny zawierający nasz wykres, należy wykonać sekwencję poleceń:

      set term postscript color
      set output 'wykres.ps'
      replot

      Po tym należy zamknąć program Gnuplot (polecenie quit) i można obejrzeć swój plik z wykresem używając programu GhostView.
      Polecenie:
      gv   wykres.ps
      Pracę programu gv kończy się naciskając Q

      Format PostScript jest doskonały ze względu na nieograniczone możliwości skalowania grafiki (jest to format wektorowy), jednak wymaga oprogramowania, które potrafi go odczytać. Bardziej uniwersalnym formatem jest format rastrowy PNG.

      Aby zapisać swój wykres w pliku graficznym o formacie PNG, należy użyć nagłówka:
      set term png size 1024,768
      set output 'wykres.png'
      replot

      Zrzut wykresu zostanie automatycznie zapisany w pliku wykres.png o rozdzielczości 1024x768 px.

    4. Obługa złożonych (skomplikowanych) plików danych
      Pobierz plik: duzo_danych.txt

      Wykonaj najprostszy wykres używając pobranego pliku z danymi, wydając polecenie:
      plot 'duzo_danych.txt' w l

      Uwagę zwraca jedna linia łamana, bardzo "gęsta", ponieważ składa się z tysiąca połączonych ze sobą punktów. Zajrzyj do pobranego pliku tekstowego "duzo_danych.txt" i potwierdź to.
      Dowiadujesz się od razu, że plik składa sie nie tylko z dwóch kolumn danych, ale aż z siedmiu. Gnuplot narysował wykres używając domyślnie kolumny pierwszej (stała się ona wartościami odłożonymi na osi odciętych (external link)) i kolumny drugiej (te wartości stały się wartościami osi rzędnych (external link)).

      • Przerzedzanie danych
        Jeżeli dysponujemy zbyt dużą ilością danych w pliku (nie chcemy aż 1000 punktów pomiarowych, tylko na przykład 100), to możemy pozbyć się ich części rysując wykres "co zadany zestaw danych" (na przykład co 10-ty). Jeżeli na przykład chcemy przygotować wykres z pierwszej i drugiej kolumny danych pliku "duzo_danych.txt" uwzględniając co piąty zestaw danych, to polecenie plot miałoby postać:

        plot 'duzo_danych.txt' u 1:3 every 5
        lub po prostu: plot 'duzo_danych.txt' u 1:3 every 5
        - ponieważ Gnuplot domyślnie i tak wykorzystuje tylko dwie pierwsze kolumny.
        Można to oczywiście połączyć z innymi elementami formatowania, na przykład:

        plot 'duzo_danych.txt' u 1:2 every 5 w lp lt 4 lw 2 pt 5 ps 3 t 'wykorzystana kolumna 1 i 2'

        Ważne jest, aby słowo "every" pojawiło sie natychmiast po wyborze kolumn (1:2) lub po nazwie pliku, jeżeli nie wybieramy innych kolumn danych, niż domyślne "1" i "2".
        Wypróbuj podane powyżej polecenie, porównaj efekt z otrzymanym poprzednio.

      • Wiele wykresów na wspólnym układzie współrzędnych
        Aby narysować kilka wykresów na wspólnym układzie współrzędnych (wyrysować kilka "kresek" na wspólnym wykresie), należy polecenia ich rysowania rozdzielić przecinkiem, na przykład:
        plot 'duzo_danych.txt' u 1:2 every 10 w l t 'kolumny 1 i 2', 'duzo_danych.txt' u 1:3 every 10 w l t 'kolumny 1 i 3', 'duzo_danych.txt' u 1:4 every 10 w l t 'kolumny 1 i 4'

        Spróbuj uzyskać efekt podobny do:
        wiele linii na wspólnym układzie wsp.
        (Na powyższym wykresie linie zostały narysowane grubością "2", zaś typy linii (lt) zostały zdefiniowane kolejno jako: "7", "2" oraz "9")

  6. Zastosowanie programu Gnuplot do obliczeń chemicznych

    Aby wykonać to ćwiczenie, stwórz plik o nazwie dane2 w swoim katalogu domowym.
    Plik dane2 powinien zawierać dwie kolumny danych:
    9    0.0961
    18   0.0856
    27   0.0767
    40   0.0645
    54   0.0536
    72   0.0432
    105  0.027
    135  0.0174
    180  0.0089
    

    Plik zawiera dane dotyczące kinetyki pewnej reakcji chemicznej przeprowadzonej w temperaturze 50°C. W pierwszej kolumnie podany jest czas w minutach, a w drugiej kolumnie podane jest stężenie w mol/l substratu reakcji. Na podstawie danych zawartych w pliku dane2 chcemy wyznaczyć stałą szybkości reakcji chemicznej, zakładając, że reakcja jest reakcją pierwszego rzędu. Zgodnie z równaniem kinetycznym reakcji pierwszego rzędu stężenie substratu reakcji przedstawione jest wzorem:

    Ct=Co exp(kt)

    Gdzie Ct to stężenie substratu w chwili t, Co to początkowe stężenie substratu, k - stała szybkości reakcji, t - czas. W rozpatrywanym przez nas przykładzie poniżej początkowe stężenie substratu wynosi 0.1056 mol/l
    Na początek używając programu Gnuplot zobaczmy, jak wygląda wykres zależności stężenia od czasu. Uruchom program Gnuplot i wykonaj polecenie:

    plot 'dane2'

    Efekt poprawnie wykonanego polecenia powinien wyglądać tak: punkty w trendzie opadającym
    Zgodnie z przedstawionym powyżej równaniem możemy wyliczyć stałą szybkości k dla tej reakcji. Oczywiście możemy dla dowolnego czasu t wyznaczyć stałą k. Możemy jednak wyznaczyć tą stałą dla całego zbioru danych, tak ją dopasowując, aby otrzymana w ten sposób funkcja najlepiej oddawała zebrane przez nas punkty pomiarowe. Oto seria komend w gnuplocie która na to pozwoli (komendy są pogrubione a zwykłą czcionką zaprezentowane są komentarze).
    Definiujemy funkcję zmiany stężenia substratu zgodnie z przedstawionym powyżej równaniem:

    f(x) = 0.1056*exp(k*x)

    Następnie dfiniujemy początkową wartość dla stałej k np. 0.1

    k=0.1

    Następnie wykonujemy fitowanie

    fit f(x) 'dane2' using 1:2 via k

    Efekt poprawnie wykonanego polecenia powinien wyglądać tak: wyliczenie współczynnika w terminalu Komendę czytamy w ten sposób, że dopasowujemy do zadanej funkcji f(x) dane ze zbioru "dane2" i pierwsza kolumna to zmienna, a druga kolumna to wartość funkcji, a parametrem który dopasowujemy jest k. Efektem działania programu jest ciag operacji matematycznych, których efekt obserwujemy w terminalu - jak na poprzedniej grafice.
    Następnie możemy narysować zestaw danych i dopasowaną funkcję na ekranie.

    plot 'dane2', f(x)

    Ile wynosi k?

↑↑↑


  Data ostatniej modyfikacji strony: 12.05.2023 r.