<\/b><\/p>
Introduktion<\/b><\/b>
<\/p>
<\/p>
Engang for l\u00E6nge siden, var der en artikel p\u00E5 Altandetlige.dk<\/a>, omkring figurer i LaTeX. Figure-floatet blev kort introduceret, og der blev tegnet i Geogebra. Ser I, historien slutter ikke hvor vi sidst slap vores editor; her kommer forts\u00E6ttelsen.<\/p> Det m\u00E5 st\u00E5 klart for enhver stud. polit., at man m\u00E5 kunne mere med LaTeX og figurer, end hvad vi s\u00E5 sidst. Vi vil se p\u00E5 kurve- og s\u00F8jledigrammer. Vi vil dog ikke bruge blyant, ej heller paint - let's get coding.<\/p> PGFPLOTS<\/b><\/p> Pakken vi vil benytte er skrevet af Dr. Christian Feuers\u00E4nger, professor ved Institut f\u00FCr Numerische Simulation, Rheinische Friedrich-Wilhelms-Universit\u00E4t Bonn (der findes officielle engelske navne, men tysk egner sig bedre til introduktionen af en LaTeX-pakke). Pakken bygger p\u00E5 PGF\/TikZ, som vi m\u00F8dte sidste gang, og kan bruges til at lave 2D- og 3D-figurer i LaTeX. Pakken bygger p\u00E5 PGF\/TikZ, og hvis man er vant til dennes syntaks, vil man f\u00F8le sig hjemme. Lad os springe ud i det.<\/p> Hvordan?<\/b><\/p> For at tegne en funktion med pgfplots, <\/i>skal der faktisk ikke meget til. Et minimalt fungerende eksempel er f\u00F8lgende.<\/p> \r\n<\/p> <\/p> Sikke en flot graf! Bevares, vi burde l\u00E6gge et float rundt om. Vi burde m\u00E5ske ogs\u00E5 angive hvad der er p\u00E5 akserne, men alt i alt er den da flot. Godt - s\u00E5 er vi klar til at tegne super avancerede funktioner, 3D-grafer og alt det sjove; ikke?<\/p> <\/p> <\/p> <\/p> Nej...<\/b><\/p> Okay, et afsnit der hedder nej, kan m\u00E5ske virke lidt afvisende - men s\u00E5 slemt er det faktisk ikke. PGFPLOTS-pakken har en masse smarte indbyggede<\/i> algoritmer til at tegne funktioner. Vi s\u00E5 lige kvadratfunktionen ovenfor - og det gik da fint og hurtigt. Problemet er, at der hurtigt skal udregnes mange talpar (x,y), for at f\u00E5 en p\u00E6n figur. De indbyggede algoritmer er dog ikke specielt effektive. (La)TeX har aldrig v\u00E6ret ment som en grafikmotor, og derfor er det heller ikke her styrken ligger. Lad os betragte to alternativer:<\/p> <\/p> Ad 1) <\/i>Den f\u00F8rste mulighed er at generere data i et andet program, og eksportere det til komma- eller tabulatorseparerede filer. Det kunne ogs\u00E5 v\u00E6re vi ville tegne en graf p\u00E5 baggrund af data fra Danmarks Statistik, og i s\u00E5 fald kan vi slet ikke generere det med vores programmer. Heldigvis er det enormt nemt at tegn p\u00E5 baggrund af en fil.<\/p> Betragt denne fil (klik)<\/a> . Den indeholder en linje med en kommentar (angivet ved et %-tegn), en linje med variabelnavne aar og befolk, og derefter kommer alle data. Filen indeholder data, som er tabulatorsepareret. Det kunne ogs\u00E5 v\u00E6re en kommasepareret fil for eksempel. Lad os tegne figuren over befolkningen i Danmark 1. januar fra 1980 til 2013. <\/p> <\/p> Koden for at f\u00E5 ovenst\u00E5ende frem kan ses i nedenst\u00E5ende box.<\/p> <\/p> <\/p> <\/p> <\/p> <\/p>\r\n <\/p> <\/p> Flere ting kunne forbedres ved denne figur. Det vender vi tilbage til efter gnuplot-<\/i>metoden.<\/i><\/p> Ad 2) Gnuplot og PGFPLOTS<\/i><\/p> Lad os igen betragte kvadratfunktionen. Nu \u00F8nsker vi dog at f\u00E5 et eksternt program, gnuplot, til at udregne koordinaterne. Det kan b\u00E5de v\u00E6re rart fordi det er et mere effektivt program, men ogs\u00E5 fordi gnuplot har funktioner, som pgfplots ikke har (fx isokvanter og andet sjov). Vi skal dog f\u00F8rst v\u00E6re sikker p\u00E5 at:<\/p> <\/p> Det f\u00F8rst punkt l\u00F8ses relativt let. Programmet hentes her<\/a>. Det er s\u00E5dan set blot at installere, p\u00E5n\u00E6r en lille detalje, som er f\u00F8rste del af punkt to. Se nedenst\u00E5ende screenshot, hvor det bliver sat hak ved at medtage programstien i windows \"PATH\"-variabel. Dette sikrer, at LaTeX kan kalde gnuplot-programmet eksternt.<\/p> <\/p> Herefter skal vi fort\u00E6lle LaTeX-compileren (pdflatex.exe fx), at den m\u00E5 k\u00F8re (kalde) eksterne programmer. I TeXnicCenter g\u00F8res dette ved at trykke: \"Build\" - \"Define Output Profiles\" og tilf\u00F8je \" --enable-write18\" under \"Path to the (La)TeX compiler:\".<\/p> <\/p> <\/p> Godt. S\u00E5 burde vi v\u00E6re klar til at bruge gnuplot. Det kan dog v\u00E6re du skal genstarte computeren, eller i hvert fald logge ind og ud af din bruger f\u00F8r det virker.<\/span> Bem\u00E6rk<\/b>: man m\u00E5 ikke have mellemrum i .tex-filnavnet, da gnuplot da ter sig underligt. Se slutningen af artiklen hvor jeg har uploadet alle eksemplerne som filer. Her er navnene \"Eksempel3.tex\", og det virker. \"Eksempel 3.tex\" ville give en gnuplot fejl.<\/i><\/span><\/p> Vi vil gerne tegne kvadratfunktionen, som f\u00F8r, men nu med gnuplot som motor. Dette kan g\u00F8res som nedenfor:<\/span><\/p> <\/span><\/p> <\/p> Dette giver f\u00F8lgende.<\/span><\/p> <\/span><\/p> <\/p> Vi skriver gnuplot efter \\addplot-kommandoen for at anvende gnuplot-programmet, og<\/span> har brugt [id=x2]-valgmuligheden, som blot er et navn. Navnet kunne undlades, men det giver orden i vores mappe. Se screenshottet nedenfor, som viser de filer gnuplot danner, og som har navnet x2.<\/span><\/p> <\/span><\/p> <\/p> Vi skriver vores funktionsforskrift i tuborgklammer, pr\u00E6cist som i det f\u00F8rste eksempel. Endeligt har vi brugt en ny (i LaTeX-artiklerne her p\u00E5 siden i hvert fald) documentclass, som hedder standalone. Standalone-klassen er intet mindre end genial hvis man vil lave en figur, men i \u00F8vrigt skriver sit dokument i et andet program. I vores tilf\u00E6lde f\u00E5r vi blot figuren ud, uden marginer, sidehoved, sidefod og s\u00E5 videre.<\/p> Oprydning<\/b><\/p> N\u00E5; f\u00F8r vi g\u00E5r videre til flere typer af figurer, s\u00E5 lad os da pr\u00F8ve, at styre grafens udseende lidt. For det f\u00F8rste vil vi fjerne kanterne til h\u00F8jre og \u00F8verst i figuren, vi vil fjerne prikkerne p\u00E5 datapunkterne og endeligt vil vi tegne figuren med en definitionsm\u00E6ngde p\u00E5 [-10;1]. Eksempel 4 g\u00F8r dette.<\/span><\/p> <\/span><\/p> <\/p>Pr\u00F8v selv at tilf\u00F8je enlargelimits=0.1 <\/i>som valgmulighed til axis, og se hvad der sker. Du skulle meget gerne f\u00E5 lidt plads rundt om figuren. X-aksen g\u00E5r s\u00E5ledes lidt l\u00E6ngere en bare definitionsm\u00E6ngden, hvilket kan v\u00E6re at foretr\u00E6kke. <\/p> <\/p> <\/p> <\/p>\r\n S\u00F8jlediagrammer <\/span><\/p> <\/p> og figuren:<\/p> <\/p> <\/p>\r\nFlere ting er i spil her. S\u00F8jlerne er defineret som koordinater. (2005,3) betyder, at der p\u00E5 x-aksens 2005-v\u00E6rdi skal v\u00E6re et niveau p\u00E5 3. Dern\u00E6st er valgt en r\u00E6kke valgmuligheder for axis-milj\u00F8et. F\u00F8rst har vi at x tick label style er defineret s\u00E5dan, at der ikke er nogen 1000-talsseparator. Pr\u00F8v at udkommentere linjen ved at placere et % foran, og se hvad der sker med \u00E5rstallene. Der er brugt enlarge x limits<\/i> i stedet for enlargelimits, som vi brugte tidligere. Dette \u00F8ger pladsen horisontalt i stedet for hele vejen rundt om figuren. Endeligt er den meget vigtige valgmulighed i axis-milj\u00F8et ybar<\/i> brugt. Se hvad der sker hvis vi ikke <\/i>skriver ybar, som valgmulighed til axis-milj\u00F8et. <\/p> Der findes naturligvis en tilsvarende xbar<\/i> valgmulighed, som bruges til at lave horisontale s\u00F8jlediagrammer. Denne kr\u00E6ver dog, i forhold til vores tidligere koordinater\/vektorer, at man lige bytter om p\u00E5 x og y-v\u00E6rdien, fx skulle vi bytte (2005,3) ud med (3,2005).<\/p> Afrunding<\/b> Dette var en lille introduktion til pakken PGFPLOTS. Der er mange flere ting man kan g\u00F8re, men der er ingen grund til at gentage hvad der st\u00E5r i den geniale manual til pakken (hent den her)<\/a>. Lad mig slutte af med at sige hvad jeg plejer. Jeg opfordrer i h\u00F8j grad til at bruge kommentarsporet og debatten her p\u00E5 Altandetlige.dk til at f\u00E5 hj\u00E6lp til alle de sm\u00E5 problemer man kan st\u00F8de p\u00E5.<\/span><\/p> Filer<\/b><\/span><\/p> Denne gang har jeg besluttet mig for at vedl\u00E6gge .tex-dokumenterne, s\u00E5 man kan hente kode, som med garanti virker. Jeg har selv k\u00F8rt disse programmer lige f\u00F8r upload, s\u00E5 hvis det ikke virker, er det jeres setup der ikke virker - ikke en scriptingfejl. <\/span><\/p>%Eksempel 1\r\n\\documentclass{article}\r\n\\usepackage{pgfplots}\r\n\r\n\\begin{document}\r\n\r\n\t\\begin{tikzpicture}\r\n\t\\begin{axis}\r\n\t\t\\addplot {x^2};\r\n\t\\end{axis}\r\n\t\\end{tikzpicture}\r\n\r\n\\end{document}<\/pre>Det vil sige et tikzpicture<\/i>-milj\u00F8, som vi allerede kender, med et axis <\/i>milj\u00F8 indeni. Dette giver:
<\/p><\/b><\/b>
<\/p>
%Eksempel 2\r\n\\documentclass{article}\r\n\\usepackage{pgfplots}\r\n\\begin{document}\r\n\\begin{tikzpicture}\r\n\\begin{axis}\r\n \\addplot table [x=aar, y=befolk, col sep=tab] {befolkningstal.txt};\r\n\\end{axis} \r\n\\end{tikzpicture}\r\n\\end{document}<\/pre>Som man kan se, bruger vi igen \\addplot-kommandoen. Det n\u00E6ste, table, <\/i>kalder en makro fra PGFPLOTS-pakken, som kan l\u00E6se en fil, som den vi har. I de kantede parenteser har vi alle vores valgmuligheder<\/i>: vi v\u00E6lger hvilken kolonne som skal p\u00E5 x- og y-akserne og angiver hvad vi adskiller vores kolonner med (her tab, kunne ogs\u00E5 v\u00E6re comma for eksempel). Til sidst angiver vi hvilken fil data skal l\u00E6ses fra.
<\/p>
<\/p>
<\/p>%Eksempel 3\r\n\\documentclass{standalone}\r\n\\usepackage{pgfplots}\r\n\r\n\\begin{document}\r\n\\begin{tikzpicture}\r\n\\begin{axis}\r\n\r\n \\addplot gnuplot [id=x2] {x^2}; \r\n\\end{axis} \r\n\\end{tikzpicture}\r\n\\end{document}<\/pre>
<\/p>
<\/p>
%Eksempel 4\r\n\\documentclass{standalone}\r\n\\usepackage{pgfplots}\r\n\r\n\\begin{document}\r\n\\begin{tikzpicture}\r\n\\begin{axis}[\r\n\t\tno marks,\r\n\t\taxis y line=left,\r\n\t\taxis x line=bottom\r\n]\r\n\t\r\n\t\\addplot gnuplot [id=x2,domain=-10:1] {x^2}; \r\n\\end{axis} \r\n\\end{tikzpicture}\r\n\\end{document}<\/pre>
<\/b><\/span>P\u00E5 engelsk hedder et s\u00F8jlediagram et barplot, og det tegnes relativt simpelt. Vi skal have data, for eksempel som talpar. Der er mange forskellige m\u00E5der at g\u00F8re det p\u00E5, men betragt Eksempel 5, som viser finanskrisens effekt p\u00E5 antallet kopper kaffe drukket, fordelt p\u00E5 m\u00E6nd, kvinder og b\u00F8r.<\/span><\/p>%Eksempel 5\r\n\\documentclass{standalone}\r\n\t\\usepackage{pgfplots}\r\n\t\\usepackage[latin1]{inputenc}\r\n\t\t\\standaloneconfig{border=0.1cm}\r\n\\begin{document}\r\n\t\\begin{tikzpicture}\r\n\t\\begin{axis}[\r\n\t\tx tick label style={\/pgf\/number format\/1000 sep=},\r\n\t\tylabel=Kopper kaffe (gennemsnit),\r\n\t\tenlarge x limits=0.15,\r\n\t\tlegend style={legend cell align=left},\r\n\t\tlegend pos=north west,\r\n\t\tybar,\r\n\t\tbar width=7pt,\r\n\r\n\t\tymin=0]\r\n\r\n\t\\addplot coordinates {(2005,3) (2006,2.6) (2007,1.6) (2008,4) (2009,7)};\r\n\t\\addlegendentry{M\u00E6nd};\r\n\t\\addplot coordinates {(2005,1) (2006,0.3) (2007,0.3) (2008,3) (2009,5)};\r\n\t\\addlegendentry{Kvinder};\r\n\t\\addplot coordinates {(2005,0) (2006,0) (2007,0) (2008,0.5) (2009,2)};\r\n\t\\addlegendentry{B\u00F8rn};\t\t\r\n\t\\end{axis}\r\n\t\\end{tikzpicture}\r\n\\end{document}<\/pre>
<\/p>
<\/p>
<\/p>
Martin Nø...
I skriver, at ‘tunge viden...
2