GNUplot

Krzysztof Trajkowski przygotował ciekawe wprowadzenie do LaTeXowego pakietu gnuplottex, który pozwala na korzystanie z komend GNUplota (narzędzia do rysowania wykresów matematycznych i prezentacji danych) w kodzie LaTeX (do pozwala na łatwe zarządzanie wielkością i krojami czcionek na wykresach).

Plik ‘Wykresy z GNUplotem’ w formacie pdf można pobrać z tego adresu.

Kody źródłowe LaTeXa dla tego wprowadzenia oraz kody źródłowe skryptów GNUplotowych można pobrać z naszego GitHuba tutaj.

A poniżej wklejam pierwsze kilka stron tego dokumentu.

——————

GNUplot

Krzysztof Trajkowski

Wprowadzenie

Gnuplot jest wolnym, wieloplatformowym oprogramowaniem do rysowania wykresów matematycznych oraz do graficznej prezentacji już obrobionych danych np. zapisanych w pliku. Ta aplikacja ma tylko kilka wbudowanych funkcji do obróbki danych np. krzywe Beziera, interpolacja (natural cubic splines algorithm), aproksymacja tzw. fitowanie (Marquardt-Levenberg algorithm). Warto też wspomnieć, że za pomocą funkcji {\verb stats } możemy obliczyć podstawowe statystyki tj. min., max., średnia, kwartyle.
Wiele aplikacji wykorzystuje gnuplota do grafki np. Octave — pakiet do obliczeń numerycznych, Maxima — pakiet do obliczeń symbolicznych, Gretl — pakiet do estymacji modeli ekonometrycznych. Warto podkreślić, że Gretl daje możliwość zapisu wykresu do pliku w formie poleceń gnuplota. Dzięki tej opcji możemy dowolnie modyfikować parametry wykresów. Dodatkowo w Gretlu możemy pisać i uruchamiać pliki skryptowe gnuplota. Warto więc poznać język komend tego programu graficznego.

Gnuplot a LaTeX

Gnuplot ma wiele formatów wyjściowych np. PostScript, GIF, EMF, SVG, PDF lub PNG. Aby zobaczyć wszystkie jakie są dostępne wystarczy w konsoli programu wpisać poniższą komendę.

set terminal

Więcej informacji o ustawieniach danego terminala można znaleźć w dokumentacji

help terminal pdf

Wiele graficznych możliwości wybranego wcześniej terminala możemy zobaczyć na rysunku, wpisując w konsoli poniższą komendę.

set terminal pdf
test

Dla osób składających swoje dokumenty w LaTeX-u
ciekawym rozwiązaniem jest użycie pakietu gnuplottex dzięki któremu możemy umieszczać kod gnuplota w pliku LaTeX-a.

\begin{figure}[!ht]
\begin{center}
\begin{gnuplot}[terminal=pdf,terminaloptions={enhanced font "Times-Roman,10" size 10cm,6cm}]
# tutaj wpisujemy kod gnuplota:
set xrange[-4:4]
set xlabel "x"
set ylabel "y"
set label "{/Symbol m} = 0, {/Symbol s}^2 = 1" at -3.5, 0.35 left
set label "{/Symbol \362@_{/=12 - \245}^{/=8 + \245}} f(x)= 1" at 1.5, 0.35 center
Gauss(x,mu,sigma) = 1./(sigma*sqrt(2*pi)) * exp( -(x-mu)**2 / (2*sigma**2) )
plot Gauss(x,0,1) t "" lc rgb "orange" lw 5
\end{gnuplot}
\end{center}
\end{figure}

Jeśli na wykresie chcemy umieszczać wzory matematyczne lub symbole greckie używanie terminala PDF lub EPS nie jest optymalnym rozwiązaniem — Rysunek \ref{Gpdf}. Jednym z rozwiązań tego problemu może być modyfikacja wykresu tzn. podmiana ciągu znaków (np. symbole matematyczne) w pliku EPS na \LaTeX-owe. Można w tym celu wykorzystać pakiet {\verb psfrag }. Jednak lepszym rozwiązaniem jest wykorzystanie terminala {\verb epslatex }. Jest to dobra alternatywa dla zestawu makr PSTricks.


set terminal epslatex
test


\begin{gnuplot}[scale=1,terminal=epslatex,terminaloptions={font 8 color colortext size 12cm,5.5cm}]
set xrange[-4:4]
set xlabel "x"
set ylabel "y"
set label "$\\mu=0,\\;\\sigma^2=1$" at -3.5, 0.35 left
set label "$\\int_{-\\infty}^{+\\infty}f(x)=1$" at 1.5, 0.35 left
Gauss(x,mu,sigma) = 1./(sigma*sqrt(2*pi)) * exp( -(x-mu)**2 / (2*sigma**2) )
plot Gauss(x,0,1) t "" lc rgb "orange" lw 5
\end{gnuplot}

Wykresy danych z pliku

Szereg czasowy

Pierwszy przykład to prezentacja kształtowania się cen otwarcia indeksu giełdowego WIG20 oraz ich wygładzenie krzywą Beziera.

Lista komend gnuplota jaką wykorzystaliśmy do wygenerowania tego wykresu jest zamieszczona poniżej.


set xdata time
set timefmt "%Y-%m-%d"
set format x "%Y\n%b"
set datafile separator ","
set xrange ["2011-12":"2013-12"]
set mxtics 3
set ylabel "Cena otwarcia"
set bmargin 0
set grid
plot "GNUwykres/DATA/wig20_d.csv" u 1:2 with lines title columnhead lc rgb "orange" lw 5, "GNUwykres/DATA/wig20_d.csv" u 1:2 smooth sbezier title "krzywa Bezier" lc rgb "black" lw 1 lt 1

Poniżej kolejny przykład wykresów giełdowych.

set xdata time
set timefmt "%Y-%m-%d"
set format x "%Y\n%b"
set datafile separator ","
set xrange ["2013-01":"2013-11"]
set bmargin 2
unset key
set grid y
set ylabel "Cena otwarcia"
set mxtics 0
set multiplot
set size 1, 0.5
set origin 0, 0.5
plot "GNUwykres/DATA/wig20_d.csv" u 1:2 with impulses lc rgb "orange" lw 1 lt 1
set origin 0, 0
plot "GNUwykres/DATA/wig20_d.csv" u 1:2:4:3:5 with candlesticks lc rgb "black"
unset multiplot

Więcej w dokumencie Wprowadzenie do GNUplota’ .

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">