Rafał Ślusarz
Celem tego mini-poradnika jest opanowanie umiejętności prezentacji danych z wykorzystaniem programu Gnuplot.
Słowa kluczowe: Gnuplot, przetwarzanie danych, modele matematyczne, wykresy
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):
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
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
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
(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:
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:
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.
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 ) i kolumny drugiej (te wartości stały się wartościami osi rzędnych
).
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.
Spróbuj uzyskać efekt podobny do:
(Na powyższym wykresie linie zostały narysowane grubością "2", zaś typy linii (lt) zostały zdefiniowane kolejno jako: "7", "2" oraz "9")
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:
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:
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?