<?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>muvik-multigrid &#187; Python-Tipp</title>
	<atom:link href="http://www.muvik.de/tag/python-tipp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.muvik.de</link>
	<description>open source - engineering - programming</description>
	<lastBuildDate>Wed, 28 Jul 2010 07:56:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Kurztipp 3: Plot-Legende mit Python</title>
		<link>http://www.muvik.de/2010/03/01/kurztipp-3-plot-legende-mit-python/</link>
		<comments>http://www.muvik.de/2010/03/01/kurztipp-3-plot-legende-mit-python/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 16:16:14 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Kurztipps]]></category>
		<category><![CDATA[Legende]]></category>
		<category><![CDATA[Plot]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Python-Tipp]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=353</guid>
		<description><![CDATA[Heute im Fokus: Steigerung der Übersichtlichkeit bei Plots mit mehreren Graphen durch Hinzufügen einer Legende. Momentan wiederhole ich einige Aufgaben zum Fach Werkstoffkunde und lasse mir Verläufe mit Python-Plots anzeigen. Meist sind es mehrere Kurven, die miteinander verglichen werden sollen. Um den Plot auf Anhieb zu verstehen und das Richtige zu vergleichen, gebe ich zu [...]]]></description>
			<content:encoded><![CDATA[<img class="cat-img-wide" alt="Viktors Kurztipp" src="http://muvik.de/categorie_images/viktorskurztipp.gif" title="Viktors Kurztipp zu diversen Themen" width="443" height="98" />
<p class="preview">Heute im Fokus: Steigerung der Übersichtlichkeit bei Plots mit mehreren Graphen durch Hinzufügen einer Legende.</p>
<p><span id="more-353"></span></p>
<p>Momentan wiederhole ich einige Aufgaben zum Fach Werkstoffkunde und lasse mir Verläufe mit Python-Plots anzeigen. Meist sind es mehrere Kurven, die miteinander verglichen werden sollen. Um den Plot auf Anhieb zu verstehen und das Richtige zu vergleichen, gebe ich zu jeder Kurve gleich die Legende mit an. So kann ich sofort erkennen, um was es sich bei den einzelnen Diagrammen handelt. Also dreht sich der heutige Kurztipp um das Hinzufügen von Legenden zu Plots mit dem <a href="http://matplotlib.sourceforge.net/">Python-Modul Pylab</a>.</p>
<h3>Legende bei einem einzigen Plot</h3>
<p>Je nach Zusammenhang kann es sinnvoll sein, nicht alle Kurven in einen einzigen Plot zu zeichnen. Daher habe ich den Kurztipp aufgeteilt, der erste Teil geht um die Legende bei einem einzigen Plot.</p>
<p>Das folgende Beispiel nehme ich aus einer der Werkstoffkunde-Aufgaben, in der es um Abkühlkurven geht. Die Funktion an sich ist zur Erklärung nicht wichtig und wird hier gnadenlos aus dem Kontext gerissen dargestellt.</p>
<pre class="brush:python">import numpy as np
import pylab as pl

def abk_lin(TA,TE,t,v):
    test = (TA-TE)/v
    erg = np.zeros_like(t)
    i = 0
    for time_ in t:

        if (time_ <= test):
            erg[i] = TA-v*time_
        else:
            erg[i] = TE
        i = i + 1
    return erg

def abk_newton(TA,TE,t,v):
    return (TA-TE)*np.exp(-v/(TA-TE)*t)+TE

TA = 900.0
TE = 20.0

v1 = 100.0
v2 = 1.0

dt = 10.0
t  = np.arange(0.0,3600.0+dt,dt)

pl.plot(t,abk_lin(TA,TE,t,v1),label='Linear v=100')
pl.plot(t,abk_lin(TA,TE,t,v2),label='Linear v=1')
pl.plot(t,abk_newton(TA,TE,t,v1),label='Newton v=100')
pl.plot(t,abk_newton(TA,TE,t,v2),label='Newton v=1')
pl.legend()
pl.show()
</pre>
<p>Der Beispiel-Code generiert ein Fenster, welches die vier Kurven enthält. Zusätzlich befindet sich in der rechten oberen Ecke eine einfache Legende. Ein Bild sagt mehr als tausend Worte:<div id="attachment_365" class="wp-caption alignnone" style="width: 453px"><a href="http://www.muvik.de/wp-content/uploads/2010/03/Abkuehlkurven.png"><img src="http://www.muvik.de/wp-content/uploads/2010/03/Abkuehlkurven-e1267458700869.png" alt="Abkühlkurven-Plot mit Legende" title="Abkühlkurven-Plot mit Legende" width="443" height="332" class="size-full wp-image-365" /></a><p class="wp-caption-text">Beispiel: Plot, vier Kurven mit Legende</p></div></p>
<p>Allgemein gehe ich bei der Erstellung einer Legende folgendermaßen vor:</p>
<ul>
<li><strong>plot</strong>-Befehl mit <em>label</em> kennzeichnen</li>
<li>Legende mit <strong>legend()</strong> anzeigen</li>
</ul>
<p>Und das war es schon!</p>
<p>Ist eine Gruppierung der Kurven sinnvoll, kann man sich die <strong>subplot</strong>-Funktion zu Nutze machen und dort auch separat die Legende erstellen.</p>
<h3>Legende bei mehreren Plots mit <em>pylab.subplot</em></h3>
<p>Um diese Funktion zu verdeutlichen, verwende ich wieder die Abkühlkurven aus dem vorherigen Beispiel und modifiziere die Darstellung etwas:</p>
<pre class="brush:python">subplot(211)
pl.plot(t,abk_lin(TA,TE,t,v1),label='Linear v=100')
pl.plot(t,abk_newton(TA,TE,t,v1),label='Newton v=100')
pl.legend()
subplot(212)
pl.plot(t,abk_lin(TA,TE,t,v2),label='Linear v=1')
pl.plot(t,abk_newton(TA,TE,t,v2),label='Newton v=1')
pl.legend()
pl.show()
</pre>
<p>Diese Variante liefert nun zwei Plot-Bereiche mit jeweils einer Legende:<br />
<div id="attachment_368" class="wp-caption alignnone" style="width: 453px"><a href="http://www.muvik.de/wp-content/uploads/2010/03/abkuehlkurven-in-zwei-plots-mit-legende-python.png"><img src="http://www.muvik.de/wp-content/uploads/2010/03/abkuehlkurven-in-zwei-plots-mit-legende-python.png" alt="Abkühlkurven in zwei Plots mit Legende - Python" title="Abkühlkurven in zwei Plots mit Legende - Python" width="443" height="332" class="size-full wp-image-368" /></a><p class="wp-caption-text">Beispiel: Zwei Plots mit jeweils einer Legende</p></div></p>
<p>Als nächstes müsste noch die x-Achse des oberen Plots angepasst werden, was aber eine andere Geschichte ist.</p>
<h3>Ist das alles?</h3>
<p>Es gibt noch einige weitere Möglichkeiten Legenden einzufügen. Eine der Möglichkeiten erlaubt das Weglassen des <em>label</em>-Tags, dafür schreibt man die Bezeichnungen in den <em>legend()</em>-Befehl. Doch dies soll ja ein Kurztipp sein, weiterführende Infos zur Legende gibt es auf der <a href="http://matplotlib.sourceforge.net/users/legend_guide.html">Pylab-Dokumentationsseite: Matplotlib</a>. Falls es gewünscht wird, kann ich gerne auch etwas ausführlicher über das Thema schreiben, dafür bitte einen Kommentar hinterlassen.</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/03/01/kurztipp-3-plot-legende-mit-python/">Permalink</a> |
<a href="http://www.muvik.de/2010/03/01/kurztipp-3-plot-legende-mit-python/#comments">keine Kommentare</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/03/01/kurztipp-3-plot-legende-mit-python/&title=Kurztipp 3: Plot-Legende mit Python">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/03/01/kurztipp-3-plot-legende-mit-python/&title=Kurztipp 3: Plot-Legende mit Python">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/03/01/kurztipp-3-plot-legende-mit-python/&title=Kurztipp 3: Plot-Legende mit Python">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/legende/" rel="tag">Legende</a>, <a href="http://www.muvik.de/tag/plot/" rel="tag">Plot</a>, <a href="http://www.muvik.de/tag/programming/" rel="tag">Programming</a>, <a href="http://www.muvik.de/tag/python/" rel="tag">Python</a>, <a href="http://www.muvik.de/tag/python-tipp/" rel="tag">Python-Tipp</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/03/01/kurztipp-3-plot-legende-mit-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kurztipp 1: Zeitmessung in Python</title>
		<link>http://www.muvik.de/2010/02/13/kurztipp-1-zeitmessung-in-python/</link>
		<comments>http://www.muvik.de/2010/02/13/kurztipp-1-zeitmessung-in-python/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 12:16:06 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Kurztipps]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Python-Tipp]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=108</guid>
		<description><![CDATA[Heute im Fokus: Messung der Zeit, die zur Ausführung eines Code-Abschnitts nötig ist. In der Vorstellung der Lösung des ersten Problems von Projecteuler.net habe ich es bereits angewendet. Die Zeitmessung könnte aus unterschiedlichen Gründen interessant sein. Für mich ist es zunächst wichtig, um unterschiedliche Versionen einer Funktion zu testen. In der schon genannten Lösung des [...]]]></description>
			<content:encoded><![CDATA[<img class="cat-img-wide" alt="Viktors Kurztipp" src="http://muvik.de/categorie_images/viktorskurztipp.gif" title="Viktors Kurztipp zu diversen Themen" width="443" height="98" />
<p class="preview">Heute im Fokus: Messung der Zeit, die zur Ausführung eines Code-Abschnitts nötig ist.</p>
<p><span id="more-108"></span>In der Vorstellung der <a href="http://www.muvik.de/2010/02/11/projecteuler-loesung-zu-problem-1/">Lösung des ersten Problems von Projecteuler.net</a> habe ich es bereits angewendet. Die Zeitmessung könnte aus unterschiedlichen Gründen interessant sein. Für mich ist es zunächst wichtig, um unterschiedliche Versionen einer Funktion zu testen. In der schon genannten Lösung des ersten Projecteuler-Problems habe ich zwei komplett verschiedene Lösungsansätze miteinander verglichen und zur Bewertung hauptsächlich die benötigte Zeit herangezogen.</p>
<h3>Zeitmessung in Python mit dem time-Modul</h3>
<p>Das time-Modul stellt in meinen Augen eine der einfachsten Varianten zur Zeitmessung zur Verfügung. Im folgenden Beispiel findest du ein kurzes Beispiel:</p>
<pre class="brush:python">import time as t
def komplexe_funktion(N):
    ...

t0 = t.time();
N = 10000000
erg = komplexe_funktion(N);
tn = t.time();

print("Ergebnis: %6i" % erg)
print ("Benötigte Zeit: %.15f" % (tn-t0))</pre>
<p> Die Funktion time() aus dem time-Modul liefert laut der <a href="http://docs.python.org/library/time.html#module-time">Python-Dokumentation</a> die genauste verfügbare Zeit zurück, was vom System abhängt. In dem Code-Beispiel wird vor und nach dem Ausführen einer Funktion die Zeit gemessen. Die Differenz der zwei Werte ergibt die Zeit, die zur Funktionsausführung benötigt wird.<br />
Was meist als CPU- oder Prozessorzeit bezeichnet wir, liefert die Funktion clock() aus dem time-Modul. Die Python-Dokumentation rät dazu, Python-Funktionen mit dieser Zeit zu benchmarken. Sie wird genauso wie time() verwendet.</p>
<h3>Zeitmessung in Python mit dem timeit-Modul</h3>
<pre class="brush:python">from timeit import Timer
s = """ ... Anweisungen ..."""
t = Timer(stmt=s)
print("Zeit mit timeit: %.15f" % (t.timeit(number=100)))
</pre>
<p> Die timeit()-Funktion verwendet standardmäßig intern die time()-Funktion auf dem meisten Systemen außer Windows und die Funktion clock() auf Windows. </p>
<h3>Welche Funktionen verwendet Ihr?</h3>
<p>Jetzt bist du an der Reihe deine Benchmarking-Methoden für einfache Funktionen darzulegen. Welche Funktionen verwendest du zur Messung der Zeit oder nach welchen Kategorien bewertest du deinen eigenen Code?</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/02/13/kurztipp-1-zeitmessung-in-python/">Permalink</a> |
<a href="http://www.muvik.de/2010/02/13/kurztipp-1-zeitmessung-in-python/#comments">keine Kommentare</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/02/13/kurztipp-1-zeitmessung-in-python/&title=Kurztipp 1: Zeitmessung in Python">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/02/13/kurztipp-1-zeitmessung-in-python/&title=Kurztipp 1: Zeitmessung in Python">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/02/13/kurztipp-1-zeitmessung-in-python/&title=Kurztipp 1: Zeitmessung in Python">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/programming/" rel="tag">Programming</a>, <a href="http://www.muvik.de/tag/python/" rel="tag">Python</a>, <a href="http://www.muvik.de/tag/python-tipp/" rel="tag">Python-Tipp</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/02/13/kurztipp-1-zeitmessung-in-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

