<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>antiblau blog &#187; MATLAB</title>
	<atom:link href="http://blog.antiblau.de/category/matlab/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.antiblau.de</link>
	<description>Interessantes aus der Welt der Computer...</description>
	<lastBuildDate>Fri, 10 Sep 2010 11:52:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Schicke Grafiken in LaTeX mit pgfplots (1)</title>
		<link>http://blog.antiblau.de/2008/09/02/schicke-grafiken-in-latex-mit-pgfplots-1/</link>
		<comments>http://blog.antiblau.de/2008/09/02/schicke-grafiken-in-latex-mit-pgfplots-1/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 22:45:36 +0000</pubDate>
		<dc:creator>LeSpocky</dc:creator>
				<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[MATLAB]]></category>

		<guid isPermaLink="false">http://blog.antiblau.de/?p=157</guid>
		<description><![CDATA[Vor einiger Zeit hatte ich im Beitrag Schicke Grafiken aus Matlab in LaTeX Möglichkeiten ausgelotet aus mit Matlab erzeugten Daten schicke Plots in LaTeX zu generieren. Sehr vielversprechend war dort das Paket pgfplots bei dem sich in den letzten Monaten einiges getan hat. Es liegt mittlerweile in Version 1.1 vor und hat neben dem Einbinden [...]]]></description>
			<content:encoded><![CDATA[<p>Vor einiger Zeit hatte ich im Beitrag <a href="http://blog.antiblau.de/2008/05/19/schicke-grafiken-aus-matlab-in-latex/">Schicke Grafiken aus Matlab in LaTeX</a> Möglichkeiten ausgelotet aus mit Matlab erzeugten Daten schicke Plots in LaTeX zu generieren. Sehr vielversprechend war dort das Paket <em>pgfplots</em> bei dem sich in den letzten Monaten einiges getan hat. Es liegt mittlerweile in Version 1.1 vor und hat neben dem Einbinden externer Datenquellen noch so manches dazugelernt. Ich möchte in diesem und einem folgenden Artikel an zwei Beispielen zeigen, wie man mit pgfplots tolle Ergebnisse produzieren kann.</p>
<p>Zunächst bleiben wir bei Matlab. Aus Matlab heraus ist es vergleichsweise einfach das .table-Format zu erzeugen, aus dem pgfplots Werte einlesen kann. Im einfachsten Fall benutzt man die Funktion <em>dlmwrite</em>. Will man auch noch Header und Kommentarzeilen in das Zwischenformat packen, muss man bisschen mehr Aufwand betreiben, ein entsprechendes Skript ist aber in kurzer Zeit fertiggestellt und bleibt dem geneigten Leser als Hausaufgabe überlassen. ;-) Meine Datei <em>dahl_2008-08-19_05.table</em> beginnt jedenfalls wie folgt:</p>
<pre lang="Plain text">
time datadownsampled datadecimated dataresampled impactdownsampled impactdecimated impactresampled
7.2 0.0042314 0.0031181 0.0017701 7.6889e-005 7.5995e-005 4.3056e-005
7.201 0.010326 0.0048359 0.0049109 8.081e-005 8.0715e-005 8.7923e-005
7.202 0.013369 -0.0069568 -0.006471 7.9993e-005 8.087e-005 7.8394e-005
7.203 -0.011055 -0.010981 -0.011697 6.9248e-005 7.0035e-005 7.2734e-005
</pre>
<p>Es folgen knapp fünfhundert weitere Zeilen. Wie man bereits am Header sieht ist es empfehlenswert ein Downsampling der zu plottenden Daten vorzusehen, wenn eine Datenreihe mehr als ein paar hundert Elemente enthält. Diese spezielle Datei enthält in der ersten Spalte die Zeit, in den Spalten zwei bis vier ein Signal und in den Spalten fünf bis sieben ein zweites Signal. Für beide Signale wurden je drei verschiedene Downsampling-Verfahren ausgetestet, das jedoch nur nebenbei und zur Erläuterung, für den Plot werde ich nur die Spalten <em>time</em> und <em>datadownsampled</em> nutzen.</p>
<p>In LaTeX-Dokument sollten die notwendigen Pakete geladen sein, in diesem Fall sieht das bei mir so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;"><span style="color: #800000; font-weight: normal;">\usepackage</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">tikz</span><span style="color: #E02020; ">}</span>
<span style="color: #800000; font-weight: normal;">\usepackage</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">pgfplots</span><span style="color: #E02020; ">}</span>
<span style="color: #800000; font-weight: normal;">\pgfplotsset</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">every axis plot/.append style={very thick</span><span style="color: #E02020; ">}}</span></pre></div></div>

<p>Die Einbindung selbst erfolgt wie gewohnt in einer float-Umgebung, die das ganze zentriert und auch noch <em>label</em> und Bildunterschrift bereit stellt. Statt <code>\includegraphics</code> fügt man aber einfach eine <em>tikzpicture</em>-Umgebung ein:</p>

<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;"><span style="color: #C00000; font-weight: normal;">\begin</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;"><span style="color: #0000D0; font-weight: normal;">figure</span></span><span style="color: #E02020; ">}[</span><span style="color: #C08020; font-weight: normal;">htb</span><span style="color: #E02020; ">]</span>
	<span style="color: #800000; font-weight: normal;">\centering</span>
	<span style="color: #C00000; font-weight: normal;">\begin</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;"><span style="color: #0000D0; font-weight: normal;">tikzpicture</span></span><span style="color: #E02020; ">}</span>
		<span style="color: #C00000; font-weight: normal;">\begin</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;"><span style="color: #0000D0; font-weight: normal;">axis</span></span><span style="color: #E02020; ">}[</span><span style="color: #C08020; font-weight: normal;">
			xlabel=Zeit (s),
			ylabel=Kraft (N),
			width=12cm,
			height=8cm</span><span style="color: #E02020; ">]</span>
		<span style="color: #800000; font-weight: normal;">\addplot</span><span style="color: #E02020; ">[</span><span style="color: #C08020; font-weight: normal;">smooth,color=blue</span><span style="color: #E02020; ">]</span> 
			table<span style="color: #E02020; ">[</span><span style="color: #C08020; font-weight: normal;">x=time,y=datadownsampled</span><span style="color: #E02020; ">]</span> <span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">plots/dahl_2008-08-19_05.table</span><span style="color: #E02020; ">}</span>;
		<span style="color: #C00000; font-weight: normal;">\end</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;"><span style="color: #0000D0; font-weight: normal;">axis</span></span><span style="color: #E02020; ">}</span>
	<span style="color: #C00000; font-weight: normal;">\end</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;"><span style="color: #0000D0; font-weight: normal;">tikzpicture</span></span><span style="color: #E02020; ">}</span>
	<span style="color: #800000; font-weight: normal;">\<span style="color: #800000; font-weight: bold;">caption</span></span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">Rohdaten Messung <span style="color: #800000; font-weight: normal;">\<span style="color: #800000; font-weight: bold;">texttt</span></span><span style="color: #E02020; ">{</span>dahl<span style="color: #800000; font-weight: normal;">\_</span>2008-08-19<span style="color: #800000; font-weight: normal;">\_</span>05</span><span style="color: #E02020; ">}}</span>
	<span style="color: #800000; font-weight: normal;">\<span style="color: #800000; font-weight: bold;">label</span></span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">fig:rohdaten_dahl_2008-08-19_05.txt</span><span style="color: #E02020; ">}</span>
<span style="color: #C00000; font-weight: normal;">\end</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;"><span style="color: #0000D0; font-weight: normal;">figure</span></span><span style="color: #E02020; ">}</span></pre></div></div>

<p>Wichtig für das Lesen aus der externen .table-Datei ist die Anweisung <em>table</em> in der Zeile beginnend mit <code>\addplot</code>. Das Ergebnis ist eine Vektorgrafik. Die Achsen sind wunderbar mit der im restlichen LaTeX-Dokument verwendeten Schrift beschriftet und zwar immer in der richtigen Größe. Mit extern als .eps oder ähnlichen Formaten eingebundenen Grafiken ist so etwas kaum möglich. Das Ergebnis spricht für sich:</p>
<p><a rel="lightbox" href="http://blog.antiblau.de/wp-content/uploads/line_kraft.png"><img src="http://blog.antiblau.de/wp-content/uploads/line_kraft-150x150.png" alt="" title="Kraftverlauf" width="150" height="150" class="alignnone size-thumbnail wp-image-158" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.antiblau.de/2008/09/02/schicke-grafiken-in-latex-mit-pgfplots-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tiefenanordnung von Linien in Matlab-Plots</title>
		<link>http://blog.antiblau.de/2008/07/31/tiefenanordnung-von-linien-in-matlab-plots/</link>
		<comments>http://blog.antiblau.de/2008/07/31/tiefenanordnung-von-linien-in-matlab-plots/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 20:51:58 +0000</pubDate>
		<dc:creator>LeSpocky</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[MATLAB]]></category>

		<guid isPermaLink="false">http://blog.antiblau.de/?p=122</guid>
		<description><![CDATA[Heute geht es mal um ein sehr spezielles Problem mit einer Lösung auf die ich gestern durch Probieren gekommen bin und sehr erstaunt war, dass das so funktioniert und offenbar sogar so vorgesehen ist. Zunächst ein paar Worte zum ursprünglichen Problem.
Ich arbeite im Institut mit Matlab 6.1, zwar schon etwas in die Jahre gekommen aber [...]]]></description>
			<content:encoded><![CDATA[<p>Heute geht es mal um ein sehr spezielles Problem mit einer Lösung auf die ich gestern durch Probieren gekommen bin und sehr erstaunt war, dass das so funktioniert und offenbar sogar so vorgesehen ist. Zunächst ein paar Worte zum ursprünglichen Problem.</p>
<p>Ich arbeite im Institut mit Matlab 6.1, zwar schon etwas in die Jahre gekommen aber brauchbar. Für die Auswertung meiner Messdaten habe ich ein GUI programmiert wo ich zwei verschiedene Sachen gleichzeitig in einem axes-Objekt darstellen will. Normalerweise kann man hier mit den Funktionen <code>hold</code> und <code>plot</code> arbeiten, aber mir war das zu unflexibel und ich habe daher gleich die LowLevel-Funktionen benutzt. Ich habe in dem GUI das gewünschte axes-Objekt. Direkt darunter in der Objekthierarchie kommen bereits die line-Objekte, die auch <code>plot</code> erzeugt. Von Hand kann man sich die mit dem Befehl <code>line</code> erzeugen, die landen dann in dem aktuellen axes-Objekt, das man zuvor mit <code>axes(axeshandle)</code> festlegen sollte. Bei der Erzeugung der line-Objekte speichere ich das line-Handle um später direkt wieder drauf zugreifen und beispielsweise die zugrundeliegenden Daten ändern zu können. </p>
<p>Soweit so gut, nun ist es so, dass ich nicht bestimmen kann, wann der Benutzer die eine Sache zum Plotten anklickt und wann die andere. Oben erscheint aber immer die zuletzt gewählte. Genauso verhält sich der Befehl <code>plot</code>. Was zuerst geplottet wird, landet hinten, die nachfolgenden Sachen darüber. Das ist bei vielen Darstellungen egal, bei einigen aber nicht.</p>
<p>Der Trick um die Darstellungsreihenfolge – oder englisch <em>z-Order</em> – zu ändern klingt ein wenig wie »von hinten durch die Brust ins Auge«, funktioniert aber wunderbar. Um zu verstehen, was dort gemacht werden muss, schaut man sich am besten nochmal die Objekthierarchie an. Ein axes-Objekt beherbergt beliebig viele line-Objekte. Die Handles dieser Objekte kann man sich ausgeben lassen:</p>

<div class="wp_syntax"><div class="code"><pre class="matlab" style="font-family:monospace;">linehandles = <span style="color: #0000FF;">get</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">gca</span>, <span style="color:#A020F0;">'Children'</span><span style="color: #080;">&#41;</span></pre></div></div>

<p>Die einzelnen Elemente des Vektors <em>linehandles</em> haben genau die Reihenfolge der Anordnung in z-Richtung wobei das erste Element das zu oberst angezeigte ist. Es spricht nichts dagegen, die Elemente umzuordnen und dem axes-Objekt wieder zuzuweisen, z.B. in umgekehrter Reihenfolge:</p>

<div class="wp_syntax"><div class="code"><pre class="matlab" style="font-family:monospace;"><span style="color: #0000FF;">set</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">gca</span>, <span style="color:#A020F0;">'Children'</span>, <span style="color: #0000FF;">flipud</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">get</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">gca</span>, <span style="color:#A020F0;">'Children'</span><span style="color: #080;">&#41;</span><span style="color: #080;">&#41;</span><span style="color: #080;">&#41;</span></pre></div></div>

<p>Ich war einigermaßen überrascht, dass das tatsächlich so funktioniert, da ich in der ausführlichen Matlab-Hilfe nie darüber gestolpert bin. Dass das wirklich so vorgesehen ist, sagt einem Matlab selbst, wenn man versucht der Eigenschaft <em>Children</em> etwas anderes als ein umgeordnetes selbst zuzuweisen:</p>
<pre>
??? Error using ==> set
Children may only be set to a permutation of itself.
</pre>
<p>Damit das ganze noch ein wenig anschaulicher wird, habe ich noch ein kleines Skript geschrieben, dass die Sache nochmal illustriert:</p>

<div class="wp_syntax"><div class="code"><pre class="matlab" style="font-family:monospace;"><span style="color: #228B22;">% test data</span>
a = <span style="color: #0000FF;">rand</span><span style="color: #080;">&#40;</span><span style="color: #33f;">5</span>,<span style="color: #33f;">1</span><span style="color: #080;">&#41;</span>
b = <span style="color: #0000FF;">rand</span><span style="color: #080;">&#40;</span><span style="color: #33f;">5</span>,<span style="color: #33f;">1</span><span style="color: #080;">&#41;</span>
c = <span style="color: #0000FF;">rand</span><span style="color: #080;">&#40;</span><span style="color: #33f;">5</span>,<span style="color: #33f;">1</span><span style="color: #080;">&#41;</span>
<span style="color: #228B22;">% line handles</span>
hp = <span style="color: #0000FF;">plot</span><span style="color: #080;">&#40;</span><span style="color: #080;">&#91;</span>a b c<span style="color: #080;">&#93;</span><span style="color: #080;">&#41;</span>                  <span style="color: #228B22;">% hp in order we plotted</span>
ha = <span style="color: #0000FF;">get</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">gca</span>, <span style="color:#A020F0;">'Children'</span><span style="color: #080;">&#41;</span>           <span style="color: #228B22;">% reverse order</span>
<span style="color: #228B22;">% vectors of line handles equal?</span>
<span style="color: #0000FF;">all</span><span style="color: #080;">&#40;</span>hp==ha<span style="color: #080;">&#41;</span>                         <span style="color: #228B22;">% not equal</span>
<span style="color: #0000FF;">all</span><span style="color: #080;">&#40;</span>hp==<span style="color: #0000FF;">flipud</span><span style="color: #080;">&#40;</span>ha<span style="color: #080;">&#41;</span><span style="color: #080;">&#41;</span>                 <span style="color: #228B22;">% should be equal, see above</span>
<span style="color: #0000FF;">all</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">sort</span><span style="color: #080;">&#40;</span>hp<span style="color: #080;">&#41;</span>==<span style="color: #0000FF;">sort</span><span style="color: #080;">&#40;</span>ha<span style="color: #080;">&#41;</span><span style="color: #080;">&#41;</span>             <span style="color: #228B22;">% also equal</span>
<span style="color: #228B22;">% thick lines</span>
<span style="color: #0000FF;">set</span><span style="color: #080;">&#40;</span>ha, <span style="color:#A020F0;">'LineWidth'</span>, <span style="color: #33f;">10</span><span style="color: #080;">&#41;</span>
<span style="color: #0000FF;">title</span><span style="color: #080;">&#40;</span><span style="color:#A020F0;">'original order'</span><span style="color: #080;">&#41;</span>
<span style="color: #0000FF;">legend</span><span style="color: #080;">&#40;</span><span style="color:#A020F0;">'a'</span>,<span style="color:#A020F0;">'b'</span>,<span style="color:#A020F0;">'c'</span><span style="color: #080;">&#41;</span>                 <span style="color: #228B22;">% order as in plot call</span>
<span style="color: #0000FF;">print</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">gcf</span>, <span style="color:#A020F0;">'-dpng'</span>, <span style="color:#A020F0;">'z-order-original.png'</span><span style="color: #080;">&#41;</span>
<span style="color: #228B22;">% color of the most front line, should be c</span>
<span style="color: #0000FF;">get</span><span style="color: #080;">&#40;</span>ha<span style="color: #080;">&#40;</span><span style="color: #33f;">1</span><span style="color: #080;">&#41;</span>, <span style="color:#A020F0;">'Color'</span><span style="color: #080;">&#41;</span>                 <span style="color: #228B22;">% should be red aka [1 0 0]</span>
<span style="color: #228B22;">% now flip lines, put c in the back</span>
<span style="color: #0000FF;">set</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">gca</span>, <span style="color:#A020F0;">'Children'</span>, <span style="color: #080;">&#91;</span>ha<span style="color: #080;">&#40;</span><span style="color: #33f;">2</span><span style="color: #080;">&#41;</span> ha<span style="color: #080;">&#40;</span><span style="color: #33f;">3</span><span style="color: #080;">&#41;</span> ha<span style="color: #080;">&#40;</span><span style="color: #33f;">1</span><span style="color: #080;">&#41;</span><span style="color: #080;">&#93;</span><span style="color: #080;">&#41;</span>
<span style="color: #0000FF;">title</span><span style="color: #080;">&#40;</span><span style="color:#A020F0;">'flipped order'</span><span style="color: #080;">&#41;</span>
<span style="color: #0000FF;">print</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">gcf</span>, <span style="color:#A020F0;">'-dpng'</span>, <span style="color:#A020F0;">'z-order-flipped.png'</span><span style="color: #080;">&#41;</span>
<span style="color: #228B22;">% color of the most front line, should be b</span>
ha = <span style="color: #0000FF;">get</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">gca</span>, <span style="color:#A020F0;">'Children'</span><span style="color: #080;">&#41;</span>           
<span style="color: #0000FF;">get</span><span style="color: #080;">&#40;</span>ha<span style="color: #080;">&#40;</span><span style="color: #33f;">1</span><span style="color: #080;">&#41;</span>, <span style="color:#A020F0;">'Color'</span><span style="color: #080;">&#41;</span>                 <span style="color: #228B22;">% should be green aka [0 0.5 0]</span></pre></div></div>

<p>Schaut man sich hier die erzeugten PNG-Bilder an, erkennt man, dass die Linie für die Datenreihe <em>c</em> zunächst ganz vorn und dann ganz hinten dargestellt wird:</p>
<p><a rel="lightbox[series]" href="http://blog.antiblau.de/wp-content/uploads/z-order-original_blog.png" title=" drei zufällige Signale in normaler Reihenfolge"><img src="http://blog.antiblau.de/wp-content/uploads/z-order-original_blog-150x150.png" alt="drei zufällige Signale in normaler Reihenfolge" title="z-order-original" width="150" height="150" class="alignleft size-thumbnail wp-image-124" /></a> <a rel="lightbox[series]" href="http://blog.antiblau.de/wp-content/uploads/z-order-flipped_blog.png" title=" drei zufällige Signale mit vertauschter Darstellungsreihenfolge"><img src="http://blog.antiblau.de/wp-content/uploads/z-order-flipped_blog-150x150.png" alt="drei zufällige Signale mit vertauschter Darstellungsreihenfolge" title="z-order-flipped" width="150" height="150" class="alignright size-thumbnail wp-image-126" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.antiblau.de/2008/07/31/tiefenanordnung-von-linien-in-matlab-plots/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Schicke Grafiken aus Matlab in LaTeX</title>
		<link>http://blog.antiblau.de/2008/05/19/schicke-grafiken-aus-matlab-in-latex/</link>
		<comments>http://blog.antiblau.de/2008/05/19/schicke-grafiken-aus-matlab-in-latex/#comments</comments>
		<pubDate>Mon, 19 May 2008 16:34:19 +0000</pubDate>
		<dc:creator>LeSpocky</dc:creator>
				<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[MATLAB]]></category>

		<guid isPermaLink="false">http://blog.antiblau.de/?p=92</guid>
		<description><![CDATA[Ich arbeite mit LaTeX und ich arbeite mit Matlab. Bei meiner letzten Arbeit habe ich die Grafiken in Matlab einfach als .eps-Datei exportiert und unverändert in meine TeX-Dateien eingebunden. Das funktioniert problemlos, sieht aber nicht so schick aus, wie es könnte. Da ich für andere Grafiken das wunderbare Paket PGF und TikZ von Till Tantau [...]]]></description>
			<content:encoded><![CDATA[<p>Ich arbeite mit LaTeX und ich arbeite mit Matlab. Bei meiner letzten Arbeit habe ich die Grafiken in Matlab einfach als .eps-Datei exportiert und unverändert in meine TeX-Dateien eingebunden. Das funktioniert problemlos, sieht aber nicht so schick aus, wie es könnte. Da ich für andere Grafiken das wunderbare Paket <a href="http://sourceforge.net/projects/pgf">PGF und TikZ</a> von Till Tantau benutze, habe ich heute Möglichkeiten ausgelotet wie man mit PGF Matlab-Grafiken schick machen könnte. Gründe dafür werden in der Doku von PGF genügend angeführt:</p>
<blockquote><p>
However, there are a number of reasons why you may wish to invest time and energy into mastering the PGF commands for creating plots:</p>
<ul>
<li>Virtually all plots produced by »external programs« use different fonts from the one used in your document.</li>
<li>Even worse, formulas will look totally different, if they can be rendered at all.</li>
<li>Line width will usually be too large or too small.</li>
<li>Scaling effects upon inclusion can create a mismatch between sizes in the plot and sizes in the text.</li>
<li>The automatic grid generated by most programs is mostly distracting.</li>
<li>The automatic ticks generated by most programs are cryptic numerics. (Try adding a tick reading »π« at the right point.)</li>
<li>Most programs make it very easy to create »chart junk« in a most convenient fashion. All show, no content.</li>
<li>Arrows and plot marks will almost never match the arrows used in the rest of the document.</li>
</ul>
<p>The above list is not exhaustive, unfortunately.
</p></blockquote>
<p>Neben PGF selbst gibt es das Paket <em>pgfplots</em> von Christian Feuersänger, das es leicht macht, einheitliche Plots zu erstellen und sogar logarithmische oder semi-logarithmische Achsen ermöglicht. Leider scheint man bei pgfplots im Gegensatz zu PGF selbst noch keine externen Dateien mit den zu plottenden Werten einbinden zu können. Das Skript <a href="http://www.ctan.org/tex-archive/graphics/pgf/contrib/pgfplots/ext_scripts/">matlab2pgfplots.m</a> funktioniert leider nicht mit dem steinalten Matlab 6.1 hier im Institut, also habe ich noch nach weiteren Möglichkeiten gesucht.</p>
<p><a href="http://www.wagenaars.org/">Paul Wagenaar</a> hat zwei interessante Tools geschrieben. <em>Mathfig2pgf</em> ist ebenfalls ein Matlab-Skript zur Umwandlung in PGF, funktioniert aber leider auch nicht mit Matlab 6.1. Das zweite Tool ist <em>Eps2pgf</em> und erinnert nicht von ungefähr an <a href="http://en.wikipedia.org/wiki/PSfrag">PSfrag</a>. Beispiele für Ergebnisse von eps2pgf kann man sich auf <a href="http://www.fauskes.net/pgftikzexamples/eps2pgf/">fauskes.net</a> ansehen.</p>
<p>Da ich nicht nur ein paar wenige Werte zu plotten habe, bin ich mir noch nicht sicher, welche Variante ich wählen werde. In Frage kommt außerdem noch die LowLevel-Variante mit PGF allein. Ein Beispiel wie man dort externe Datenquellen, z.B. den Output von <a href="http://www.gnuplot.info/">gnuplot</a> einbindet ist dokumentiert, allerdings muss man sich dann wieder Achsen etc. alles selbst bauen, also wird es wahrscheinlich die Variante mit eps2pgf werden, es sei denn pgfplots wird um die Funktion zur Nutzung externer Datenquellen erweitert. Kommt Zeit, kommt Rat, so dringend ist das Problem ja nicht.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.antiblau.de/2008/05/19/schicke-grafiken-aus-matlab-in-latex/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MinusPiPiTransform</title>
		<link>http://blog.antiblau.de/2007/10/11/minuspipitransform/</link>
		<comments>http://blog.antiblau.de/2007/10/11/minuspipitransform/#comments</comments>
		<pubDate>Thu, 11 Oct 2007 06:49:56 +0000</pubDate>
		<dc:creator>LeSpocky</dc:creator>
				<category><![CDATA[MATLAB]]></category>
		<category><![CDATA[MSRS]]></category>
		<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://blog.antiblau.de/2007/10/11/minuspipitransform/</guid>
		<description><![CDATA[Da wird sich doch der eine oder andere fragen, was diese seltsame Überschrift zu bedeuten hat. *gg* Also heute in diesem Kino nicht etwa das Wasserlassen von Kleinkindern sondern:
Wie transformiere ich Winkel in das Intervall [−π, π]?
Das Problem stellte sich mir vor einigen Wochen im Rahmen meiner Studienarbeit das erste mal. Ich hatte zunächst einen [...]]]></description>
			<content:encoded><![CDATA[<p>Da wird sich doch der eine oder andere fragen, was diese seltsame Überschrift zu bedeuten hat. <strong>*gg*</strong> Also heute in diesem Kino nicht etwa das Wasserlassen von Kleinkindern sondern:<br />
<em>Wie transformiere ich Winkel in das Intervall [−π, π]?</em></p>
<p>Das Problem stellte sich mir vor einigen Wochen im Rahmen meiner Studienarbeit das erste mal. Ich hatte zunächst einen Algorithmus entwickelt, der sich in einer Schleife so lange dem Zielintervall näherte, bis der Winkel transformiert war. Das ist zuverlässig, leicht zu durchschauen und langweilig. Meine Idee für eine elegante einzeilige Lösung war ein wenig mit der Signum-Funktion rumzuspielen und durch geschicktes Anwenden von Runden und aller vier Grundrechenarten die Geschichte mit der Schleife zu umgehen.</p>
<p>Im Prinzip gehe ich dabei ähnlich vor wie im Schleifenalgorithmus: ich addiere oder subtrahiere solange Vielfache von 2π bis ich im Zielintervall bin. Will ich das in einer Zeile tun, muss ich das notwendige Vielfache rausbekommen und das Vorzeichen.</p>
<p>Stellt man sich den allseits beliebten Zahlenstrahl vor – vorstellen mit Zettel und Stift ist leichter ;-) – erkennt man die Zuordnung:</p>
<ul>
<li>[−5π, −3π] : 2</li>
<li>[−3π, −π] : 1</li>
<li>[−π, π] : 0</li>
<li>[π, 3π] : −1</li>
<li>[3π, 5π] : −2</li>
</ul>
<p>Das Intervall [−π, π] um 0 rum stört. Das erste was ich deshalb tue: ich addiere <em>sign(inAngle)*π</em> zu meinem Einganswinkel <em>inAngel</em>. Dadurch schaffe ich mir zwar einen toten Bereich um 0 rum, aber die neuen Abschnitte haben ihre Grenzen bei vollen Vielfachen von 2π, so dass ich nun durch 2π teilen kann. Das Ergebnis runde ich derart, dass ich auf die nächste volle Zahl in Richtung 0 runde, d.h. ich runde bei positiven Zahlen ab und bei negativen auf oder kurz gesagt: ich schneide einfach die Nachkommastellen des Divisionsergebnisses ab. ;-) Damit habe ich schon die gesuchten Koeffizienten mit richtigem Vorzeichen. Die multipliziere ich dann wieder mit 2π und das Ergebnis ziehe ich vom Eingangswinkel ab, fertig. In Simulink sieht das dann aus wie auf dem folgenden Bild (zum Vergrößern anklicken):</p>
<p><a rel="lightbox" href='http://blog.antiblau.de/wp-content/myangle2.png' title='Transformation von minus PI bis PI in Simulink'><img src='http://blog.antiblau.de/wp-content/myangle2.thumbnail.png' alt='Transformation von minus PI bis PI in Simulink' /></a></p>
<p>In Matlab liest sich das wie folgt:</p>

<div class="wp_syntax"><div class="code"><pre class="matlab" style="font-family:monospace;"><span style="color: #0000FF;">function</span> outAngle = MinusPiPiTransform<span style="color: #080;">&#40;</span>inAngle<span style="color: #080;">&#41;</span>
    outAngle = inAngle - <span style="color: #080;">...</span>
        <span style="color: #0000FF;">fix</span><span style="color: #080;">&#40;</span> <span style="color: #080;">&#40;</span>inAngle + <span style="color: #0000FF;">sign</span><span style="color: #080;">&#40;</span>inAngle<span style="color: #080;">&#41;</span>*<span style="color: #0000FF;">pi</span><span style="color: #080;">&#41;</span> / <span style="color: #080;">&#40;</span><span style="color: #33f;">2</span>*<span style="color: #0000FF;">pi</span><span style="color: #080;">&#41;</span> <span style="color: #080;">&#41;</span> * <span style="color: #080;">...</span>
        <span style="color: #33f;">2</span>*<span style="color: #0000FF;">pi</span>;
<span style="color: #0000FF;">end</span><span style="color: #228B22;">%function</span></pre></div></div>

<p>Diese Lösung hatte ich wie gesagt vor ein paar Wochen entwickelt. Heute brauchte ich das ganze wieder, allerdings in C# – kein Problem. Einfach den Teil aus dem Matlab-Skript in C# übersetzt und dann sieht das ganze so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">double</span> MinusPiPiTransform<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">double</span> inAngle<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">return</span> inAngle <span style="color: #008000;">-</span>
        Math.<span style="color: #0000FF;">Truncate</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>inAngle <span style="color: #008000;">+</span> Math.<span style="color: #0000FF;">Sign</span><span style="color: #000000;">&#40;</span>inAngle<span style="color: #000000;">&#41;</span> <span style="color: #008000;">*</span> Math.<span style="color: #0000FF;">PI</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">/</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">2</span> <span style="color: #008000;">*</span> Math.<span style="color: #0000FF;">PI</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">*</span>
        <span style="color: #FF0000;">2</span> <span style="color: #008000;">*</span> Math.<span style="color: #0000FF;">PI</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.antiblau.de/2007/10/11/minuspipitransform/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
