Gnuplot is een op programma voor het plotten van functies en data en het verrichten van niet-lineaire fitting op data.
Gnuplot kan gebruikt worden als stand alone software voor het maken van grafieken. Het kan een waaier aan output-formaten produceren: png-graphics, kolommen met tekstdata, LaTeX-output, grafieken in fig-formaat... Gnuplot kan ook onder het X window systeem grafieken afbeelden. Voor ons is echter het belangrijkste de mogelijkheid om niet-lineaire fitting op data te verrichten. Deze feature is veel krachtiger dan de traditionele lineaire- en polynoomregressie die we in andere software terugvinden.
Andere features van Gnuplot zijn de mogelijkheid om rudimentaire programmeercommando's uit te voeren, de mogelijkheid om shell-commando's uit te voeren en de mogelijkheid om output door te geven aan andere applicaties d.m.v. het pipe-mechanisme bekend uit de Unix/Linux-wereld. Gnuplot is ook ideaal voor cgi-applicaties waarin grafieken moeten gegenereerd worden.
Start een interactieve Gnuplot-sessie gnuplot Opm.: Gnuplot verlaten doe je met het commando quit Zet de mouse support af gnuplot> unset mouse Grafiek y = x2 gnuplot> plot x**2 # Opmerking: Het symbool voor machtsverheffing in Gnuplot is twee # sterretjes, "**". Gnuplot gebruikt niet "x^2" voor "x kwadraat". Grafiek y = x2 voor x = -5 tot 5 plot [-5:5] x**2 Plot sin(x) en x tot de 2de voor x = -pi tot pi plot [-pi:pi] sin(x),x**2 Grafiek y = x3 voor x = -5 tot 5 en y = -10 tot 10 plot [-5:5] [-10:10] x**3 Om verschillende functies te plotten op hetzelfde scherm gebruik je komma's. Voorbeeld: plot x**2,(x-2)**2,x**2-2 Maak een functie-tabel met x en y-waarden set table #Bovenstaand commando zal ervoor zorgen dat de output van het plot-commando #niet langer op het scherm geplot wordt, maar in een data-tabel terecht komt. plot [-5:5] x**2 Maak een functie-tabel met x en y-waarden en sla de waarden op in een bestand met als naam "test.dat". set table "test.dat" plot [-5:5] x**2 U kan de aangemaakte data file bekijken met de pager (tekstbrowser) less zonder Gnuplot te verlaten: !less test.dat Plot de data-file met naam "test.dat" die een tabel bevat met x en y-waarden. unset table plot 'test.dat' Plot de data-file met naam "test.dat" gebruikmakend van lijnsegmenten. # Opmerking: data-files kunnen commentaarlijnen bevatten maar # mogen geen andere lijnen bevatten zonder data. plot 'test.dat' with lines Plot de data-file met naam "test.dat" gebruikmakend van lijnen en punten. plot 'test.dat' with linespoints Voer een "smooth-operatie" uit op de data in een file met naam "test.dat". plot "test.dat" smooth csplines Label de x- en y-as. Define a function and plot it. set xlabel 'x' # set the x-axis label set ylabel 'y' # set the y-axis label f(x) = x**2+2*x # define a function, f(x) plot f(x) Gebruik van Gnuplot voor lineaire regressie. # Maak de volgende sample data aan: d(x) = x + rand(0) # voeg random waarden toe aan y = x set table 'test.dat' # stel als output een data-tabel in # met als bestandsnaam "test.dat" plot [-3 to 3] d(x) # maak de data file aan. !less test.dat # check de data file # Fit een lineaire functie op de data. # Dit zijn de instructies voor lineaire fitting. f(x) = a*x + b # definieer een lineaire functie fit f(x) 'test.dat' via a,b # bereken de regressiecoëfficiënten a,b # Merk op dat Gnuplot na fitting een "Asymptotic Standard Error" oplevert die een kwantitatieve indicator # is voor de kwaliteit van de fitting. Er bestaat echter geen algemeen eenvoudig verband tussen deze # Asymptotic Standard Error en de meer bekende correlatiecoëfficiënt die we hanteren bij # klassieke regressie-analyse. Daarom kan men tegenwoordig in Gnuplot ook de correlatiecoëfficiënt opvragen # voor lineaire regressie met een extra commando: stats 'test.dat' unset table # Plotten van de gefitte kromme en de bijhorende data plot f(x), 'test.dat' # plot de rechte ende data # We gaan straks de correlatiecoëfficiënt ook op onze grafiek printen: set label sprintf("r = %1.4f", STATS_correlation) at -2.75,3 replot # We willen ook de richtingscoëfficiënt op de grafiek: set label sprintf("slope = %1.4f", STATS_slope) at -2.75,2.75 replot # En tenslotte het intercept: set label sprintf("intercept = %1.4f", STATS_intercept) at -2.75,2.5 replot # We kunnen meer algemeen de parameters bepaald uit de fitting zelf, ook rechtstreeks gebruiken (dus zonder # informatie afkomstig van het stats-commando te gebruiken) als volgt: set label sprintf("functievoorschrift: %1.4f x + %1.4f [V]",a,b) at -2.75,2.25 replot Gebruik van Gnuplot voor niet-lineaire fitting. # Vanaf nu maken we altijd een batch-file aan met de nodige commando's # en voeren die dan naderhand uit. Maakt een batch-file aan met als naam # nietlin.gp (we gebruiken de extensie .gp voor Gnuplot batch files) # Zet deze commando's in de batch-file: d(x) = x**2 + rand(0) # voeg random waarden toe aan x^2 set table "test.dat" # stel als output een data-tabel in # met als filename "test.dat" plot [-3 to 3] d(x) # maak de data-file aan. # Fit een 2de graads polynoom op de data. f(x) = a*x**2 + b*x + c # definieer een kwadratische functie fit f(x) 'test.dat' via a,b,c # bereken de coëfficiënten a,b,c unset table plot f(x), 'test.dat' # plot de polynoom en de data # Toon de coëfficiënten a,b,c show v # of show var, show variables, etc. # Save de batch-file nietlin.gp en voer hem uit met het commando: gnuplot < nietlin.gp -persist # de vlag -persist is noodzakelijk om de # scherminhoud te laten staan Hoe een Gnuplot-grafiek in een LaTeX-document opnemen # Stel de terminal in voor pslatex output set terminal pslatex set output "graf.tex" plot x**2 set output q # Bemerk hierboven laatste 'set output', # nodig om de file netjes af te sluiten! # Maak de volgende LaTeX-file aan met naam latexdocmetgraf.tex # gebruikmakend van de teksteditor nano: %========================================================== % De grafiek zelf bevindt zich in de file 'graf.tex'. %========================================================== \documentclass{artikel3} \usepackage[a4paper]{geometry} \usepackage{varioref} \usepackage[dutch]{babel} \usepackage{graphicx} \usepackage{epic,eepic,latexsym,rotating} \begin{document} De grafiek in figuur~\vref{fig:xkwadraat} werd gemaakt met Gnuplot. \begin{figure} %Het volgende commando laadt onze figuur 'graf.tex' \include{graf} \caption{$y=x^2$ gemaakt met Gnuplot \label{fig:xkwadraat}} \end{figure} \end{document} # Run LaTeX met als input latexdocmetgraf.tex latex latexdocmetgraf.tex # Run LaTeX nogmaals om cross-references (verwijzingen naar labels) in orde te brengen latex latexdocmetgraf.tex # Zet de resulterende file latexdocmetgraf.dvi om naar een postscript-file: dvips latexdocmetgraf -o # Bekijk de postscript-file latexdocmetgraf.ps met Ghostview: gv latexdocmetgraf.ps # Hoewel het nuttig is de vorige "command chain" bestaande uit 4 commando's # te kennen --o.a. voor als er iets mis zou lopen bij de uitvoering van 1 van # de commando's --, kan het handig zijn dit proces te automatiseren. Met het # scriptje lx dat op de PCs in B225 en B226 onder Linux geïnstalleerd is, wordt # de volledige command chain als volgt afgehandeld: lx latexdocmetgraf # Om een paginavullende grafiek in LaTeX te bekomen ga je als volgt te werk: # Stel de terminal in voor pslatex output set terminal pslatex size 25cm,17cm set output 'graf2.tex' plot x**2 set output q # Maak de volgende LaTeX-file aan met naam latexdocmetgraf2.tex # gebruikmakend van de teksteditor nano: %========================================================== % De grafiek zelf bevindt zich in de file 'graf2.tex'. %========================================================== \documentclass{artikel3} \usepackage[a4paper]{geometry} \usepackage{varioref} \usepackage[dutch]{babel} \usepackage{graphicx} \usepackage{epic,eepic,latexsym,rotating} %Het hieronderstaande stukje code defineert een omgeving narrow die nodig %is om paginavullende grafieken in het \LaTeX-document te kunnen %opnemen \newenvironment{narrow}[2]{% \begin{list}{}{% \setlength{\topsep}{0pt}% \setlength{\leftmargin}{#1}% \setlength{\rightmargin}{#2}% \setlength{\listparindent}{\parindent}% \setlength{\itemindent}{\parindent}% \setlength{\parsep}{\parskip}}% \item[]}{\end{list}} \begin{document} De grafiek in figuur~\vref{fig:xkwadraat} werd gemaakt met Gnuplot. \begin{sidewaysfigure}[hbt] \begin{narrow}{-1.2cm}{0in} \include{graf2} \caption{$y=x^2$ Gemaakt met Gnuplot \label{fig:xkwadraat}} \end{narrow} \end{sidewaysfigure} \end{document} # Run LaTeX met als input latexdocmetgraf2.tex latex latexdocmetgraf2.tex # Run LaTeX nogmaals om cross-references in orde te brengen latex latexdocmetgraf2.tex # Zet de resulterende file latexdocmetgraf2.dvi om naar een postscript-file: dvips latexdocmetgraf2 -o # Bekijk de postscript-file latexdocmetgraf2.ps met Ghostview (gv) of Okular: gv latexdocmetgraf2.ps Gebruik van Gnuplot voor grafische postprocessing van Spice-output # Maak de volgende input-file voor Spice 2G6 met naam rc.cir: een genormaliseerd rc-ldf-filter vin 1 0 ac 1 r1 1 2 1 c1 2 0 1 .ac dec 20 1m 100 .print ac vdb(2) vp(2) .end # Simuleer de schakeling met Spice 2G6 en maak een output-file rc.out aan: spice <rc.cir >rc.out # Editeer de output-file rc.out zodat alleen de kolommen met de numerieke # waarden overblijven en noem deze file rc.dat # Start Gnuplot op en geef volgende commando's: set logscale x plot [1e-3:100] 'rc.dat' smooth csplines, 'rc.dat' # Vergelijk het resultaat met: plot [1e-3:100] 'rc.dat' smooth bezier, 'rc.dat' # Best van al is natuurlijk te fitten op het gekende functievoorschrift: f(x)=20*log10(a/(1+(x/b)**2)**0.5) fit f(x) 'rc.dat' via a,b plot f(x), 'rc.dat' # Nu ook nog de fasekarakteristiek fitten en plotten: set angles degrees g(x)=-atan(x/c) fit g(x) 'rc.dat' using 1:3 via c plot g(x), 'rc.dat' using 1:3 # Maak zelf een bladzijdevullende grafiek van deze plots voor LaTeX. # Zet de Gnuplot-commando's voor de amplitudekarakteristiek samen in een batch-file rcamp.gp # Zet de Gnuplot-commando's voor de fasekarakteristiek samen in een batch-file rcfas.gp # De batch-file kunt u in Gnuplot laden met het commando: load 'rcamp.gp' respectievelijk load 'rcfas.gp' # Of nog beter: gnuplot <rcamp.gp -persist respectievelijk gnuplot <rcfas.gp -persist # Of nog anders: u kunt het script zelf uitvoerbaar maken door toevoegen op de 1ste regel # van een shebang: #!/usr/bin/gnuplot, mits het script executable gemaakt is (chmod +x) # kunt u het dan opstarten met: ./rcamp.gp
Gnuplot in Action (Understanding data with graphs), Philipp K. JanertWeb Resources
Main Site voor Gnuplot http://www.gnuplot.info/ Hier staan verschillende links voor tutorials en enkele GUIs voor Gnuplot. Gnuplot Tutorial by Henri Gavin http://www.duke.edu/~hpgavin/gnuplot.html Nog een aantal Gnuplot-links http://users.skynet.be/hugocoolens/linux/gnuplotstuff.html Voor vragen en problemen: vergeet de newsgroup comp.graphics.apps.gnuplot niet te raadplegen. Kijk eerst of uw vraag nog niet gesteld en/of beantwoord werd d.m.v. groups.google.com en post pas dan een boodschap in de nieuwsgroep.