Visualiserung#
Zur Visualisierung von Daten benutzt man in Python typischerweise das Modul \(\texttt{pyplot}\) des Pakets Matplotlib. Daher importieren wir es zu Beginn dieses Kapitels.
import matplotlib.pyplot as plt
import numpy as np
In diesem Unterkapitel werden Sie mit den eindimensionalen Arrays \(\texttt{wochentag}\), \(\texttt{besuchszahlen_montag}\), \(\texttt{besuchszahlen_dienstag}\) und \(\texttt{besuchszahlen_montage_average}\) arbeiten. Der folgende, versteckte Code initialisiert die Arrays automatisch, sobald Sie den Live-Code-Modus starten.
Show code cell content
uhrzeit = np.arange(11.5, 15, 0.5)
besuchszahlen_montag = np.array([99, 372, 250, 600, 357, 116, 23])
besuchszahlen_dienstag = np.array([94, 225, 424, 528, 416, 284, 201])
besuchszahlen_montag_average = np.array([5.45, 367.32, 268.12, 620.07, 370.34, 70.58, 23.56])
Vektoren in einem Diagramm/Plot darstellen#
Zwei Vektoren \(\texttt{x}\) und \(\texttt{y}\) derselben Länge können mittels der Funktion \(\texttt{plt.plot(x, y)}\) in einem Diagramm/Plot dargestellt werden. Der Vektor \(\texttt{x}\) entspricht dabei den \(x\)- und der Vektor \(\texttt{y}\) den \(y\)-Koordinaten des Graphen.
x = np.arange(0.05, 2.05, 0.05)
y = np.log(x)
plt.plot(x, y)
plt.show()
Der Befehl \(\texttt{plt.show()}\) wird in Python verwendet, um bei der Datenvisualisierung mit Matplotlib das Diagramm anzuzeigen. \(\texttt{plt.show()}\) öffnet ein Fenster mit dem erstellten Diagramm oder zeigt es im Jupyter Notebook. Ohne diesen Befehl bleibt das Diagramm oft verborgen, besonders außerhalb von interaktiven Programmierumgebungen. Sowohl diese Website als auch Jupyther Notebooks stellen eine interaktive Umgebnung dar. Hier können Sie den Befehl \(\texttt{plt.show()}\) also auch weglassen.
Aufgabe 1.1
Erstellen Sie ein Diagramm mit \(\texttt{uhrzeit}\) auf der \(x\)-Achse und \(\texttt{besuchszahlen_montag}\) auf der \(y\)-Achse.
# Ihr Code
Hinweis
Nutzen Sie die Funktion \(\texttt{plt.plot}\) und die Variablen \(\texttt{uhrzeit}\) und \(\texttt{besuchszahlen_montag}\) als Eingaben.
Lösung
plt.plot(uhrzeit, besuchszahlen_montag)
plt.show()
Sie können unter anderem die Farbe, die Linienart, sowie die Markierung innerhalb eines Plots angepassen.
plt.plot(x, y, 'r--o')
plt.show()
Der obige Befehl erstellt ein Diagramm mit einer roten (\(\texttt{r}\)), gestrichelten (\(\texttt{--}\)) Linie mit kreisförmigen Markierungen (\(\texttt{o}\)).
Weitere Informationen zu den verfügbaren Markersymbolen finden Sie hier und zu den verfügbaren Linienarten hier.
Aufgabe 1.2
Erstellen Sie ein Diagramm, in dem \(\texttt{besuchszahlen_dienstag}\) (\(y\)-Achse) im Vergleich zu \(\texttt{uhrzeit}\) (\(x\)-Achse) dargestellt wird. Der geplottete Graph soll dabei eine blaue (\(\texttt{b}\)), gepunktete (\(\texttt{:}\)) Linie mit sternförmige (\(\texttt{*}\)) Markierungen sein.
# Ihr Code
Lösung
plt.plot(uhrzeit, besuchszahlen_montag, 'b:*')
plt.show()
Beachten Sie, dass wenn Sie mehrere \(\texttt{plot}\)-Befehle direkt hintereinander ausführen ohne diese durch den Befehl \(\texttt{plt.show()}\) zu trennen, werden die Graphen entlang derselben Achsen geplottet in einen gemeinsamen Diagramm dargestellt.
x = np.array([5, 6, 8, 9, 11])
y = np.array([10, 11, 12, 15, 17])
x2 = x + 1
y2 = y + 2
plt.plot(x, y)
plt.plot(x2, y2)
plt.show()
Dieses Verhalten kann gewünscht sein, muss es aber nicht. Um Python mitzuteilen, dass Sie beide Plots separat darstellen wollen, können Sie den bereits bekannten Befehl \(\texttt{plt.show()}\) verwenden oder den Befehl \(\texttt{plt.figure()}\), welcher Python signalisiert, dass das Diagramm in einem neuen Plot mit eigenen Achsen dargestellt werden soll.
Im besten Fall verwenden Sie beide Befehle, denn \(\texttt{plt.figure}\) erstellt eine leere Leinwand (außerhalb von interaktiven Programmierumgebungen ein neues Fenster) für die kommenden \(\texttt{plot}\)-Befehle und der Befehl \(\texttt{plt.show}\) zeigt die Diagramme schließlich an.
plt.figure() # Python erstellt eine neue Figure (= leere Leinwand)
plt.plot(x, y) # der Graph wir erstellt
plt.show() # der Graph wird angezeigt
plt.figure()
plt.plot(x2, y2)
plt.show()
Aufgabe 1.3
Erstellen Sie ein Diagramm, in dem \(\texttt{besuchszahlen_montag}\) (\(y\)-Achse) in Bezug zu \(\texttt{uhrzeit}\) (\(x\)-Achse) dargestellt wird, und verwenden Sie schwarze (\(\texttt{k}\)), quadratische (\(\texttt{s}\)) Markierungen ohne Linie. Stellen Sie im selben Diagramm auch \(\texttt{besuchszahlen_dienstag}\) (\(y\)-Achse) in Bezug zu \(\texttt{uhrzeit}\) dar. Verwenden Sie dabei blaue (\(\texttt{b}\)), dreieckige (\(\texttt{^}\)) Markierungen ohne Linie.
# Ihr Code
Lösung
plt.figure()
plt.plot(uhrzeit, besuchszahlen_montag, 'ks')
plt.plot(uhrzeit, besuchszahlen_dienstag, 'b^')
plt.show()
Wenn Sie der Funktion \(\texttt{plt.plot}\) nur einen einzelnen Vektor übergeben um ein Diagramm zu erstellen, verwendet Python die Vektorwerte als Daten für die \(y\)-Achse und setzt die Daten für die \(x\)-Achse auf den Bereich von \(0\) bis \(n-1\), wobei \(n\) die Anzahl der Elemente im Vektor ist.
Aufgabe 1.4
Stellen Sie den Vektor \(\texttt{besuchszahlen_montag}\) in einem Diagramm dar.
# Ihr Code
Lösung
plt.figure()
plt.plot(besuchszahlen_montag)
plt.show()
Wenn Sie die Funktion \(\texttt{plt.plot}\) verwenden, können Sie optional Eigenschaften festlegen, indem Sie Name-Wert-Argumente verwenden, welche aus einem Argumentnamen und einem zugeordneten Wert bestehen. Beispielsweise wird mit diesem Befehl eine Linie mit sehr breiter Linienstärke in einem Diagramm dargestellt:
plt.plot(y, linewidth=5)
Weitere Informationen zu verfügbaren Eigenschaften erhalten Sie in der Dokumentation Line Properties.
Aufgabe 1.5
Stellen Sie \(\texttt{besuchszahlen_montag}\) mit einer Linienstärke von \(3\) in einem Diagramm dar.
# Ihr Code
Lösung
plt.figure()
plt.plot(besuchszahlen_montag, linewidth=3)
plt.show()
plt.plot(x, y,"ro--", linewidth=5)
Aufgabe 1.6
Stellen Sie \(\texttt{besuchszahlen_montag}\) (\(y\)-Achse) im Vergleich zu \(\texttt{uhrzeit}\) (\(x\)-Achse) mit roten (\(\texttt{r}\)), kreisförmigen (\(\texttt{o}\)) Markierungen und einer durchgezogenen Linie (\(\texttt{-}\)) in einem Diagramm dar. Verwenden Sie eine Linienstärke von \(4\).
# Ihr Code
Lösung
plt.figure()
plt.plot(uhrzeit, besuchszahlen_montag, 'r-o', linewidth=4)
plt.show()
Die Funktion \(\texttt{plt.plot}\) erstellt Linien. Python stellt jedoch noch viele weitere Diagrammerstellungsfunktionen zur Verfügung. Eine umfangreiche Übersicht finden Sie hier. Für jedes Diagramm stehen andere Anpassungsfunktionen zur Verfügung.
Aufgabe 1.6
Erstellen Sie ein Histogramm von \(\texttt{besuchszahlen_montag_average}\) mithilfe der Funktion \(\texttt{plt.hist}\). Setzen Sie die Farbe auf Grün (\(\texttt{green}\)) und die Kantenfarbe (\(\texttt{edgecolor}\)) auf Weiß (\(\texttt{white}\))
# Ihr Code
Lösung
plt.figure()
plt.hist(besuchszahlen_montag_average, color='green', edgecolor='white')
plt.show()
Beschriftungen von Diagrammen#
Sie können Diagrammen Beschriftungen hinzufügen, indem Sie Plotanmerkungsfunktionen wie \(\texttt{plt.title}\) verwenden. Für diese Funktionen müssen Sie Text eingeben. In Python wird Text in Anführungszeichen (\(\texttt{"}\)) gesetzt.
plt.title("Plot Titel")
Aufgabe 2.1
Erweitern Sie den vorgegebenen Code, sodass das Diagramm den Titel \(\texttt{"Durchschnittliche Besuchszahlen am Montag"}\) hat.
plt.figure()
plt.plot(uhrzeit, besuchszahlen_montag_average)
plt.show()
Hinweis
Verwenden Sie die Funktion \(\texttt{plt.title}\) mit einer Texteingabe. Verwenden Sie \(\texttt{"Durchschnittliche Besuchszahlen am Montag"}\) als Eingabe. Der Befehl \(\texttt{plt.show()}\) zeigt das finale Bild an. Überlegen Sie sich also an welcher Stelle Sie den Befehl \(\texttt{plt.title}\) platzieren.
Lösung
plt.figure()
plt.plot(uhrzeit, besuchszahlen_montag_average)
plt.title("Durchschnittliche Besuchszahlen am Montag")
plt.show()
Sie können Beschriftungen zu Ihren Achsen hinzufügen, indem Sie die Funktionen \(\texttt{xlabel}\) und \(\texttt{ylabel}\) verwenden.
plt.ylabel("Label der y-Achse")
Aufgabe 2.2
Erweitern Sie den vorgegebenen Code, sodass die \(y\)-Achse des Plots mit \(\texttt{"durchschnittliche Besuchszahlen"}\) beschriftet wird.
plt.figure()
plt.plot(uhrzeit, besuchszahlen_montag_average)
plt.show()
Lösung
plt.figure()
plt.plot(uhrzeit, besuchszahlen_montag_average)
plt.ylabel("Durchschnittliche Besuchszahlen")
plt.show()
Wenn Sie in einem Diagramm mehrere Daten darstellen, ist es sinnvoll eine Legende zu verwenden. Um eine Legende zu erstellen stehen Ihnen zwei, äquivalente Möglichkeiten zur Verfügung.
Sie könnnen die Funktion \(\texttt{plt.legend(["Label A", "Label B"])}\) verwenden, um in Ihrem Diagramm eine Legende hinzufügen.
plt.figure()
plt.plot(x, y)
plt.plot(x2,y2)
plt.legend(["Label A", "Label B"])
plt.show()
Sie können das Schlüsselwort \(\texttt{label}\) verwenden um jedem Diagramm direkt beim Ausführen des \(\texttt{plot}\)-Befehls einen Namen zuzuweisen.
plt.figure()
plt.plot(x, y, label="Label A")
plt.plot(x2, y2, label="Label B")
plt.legend()
plt.show()
Aufgabe 2.3
Die Daten \(\texttt{besuchszahlen_montag}\) stammen von einem Montag und die Daten \(\texttt{besuchszahlen_dienstag}\) von einem Dienstag im Semester. Erweitern Sie den vorgegebenen Code, sodass eine Legende mit den entsprechenden Beschriftungen \(\texttt{"Montag"}\) und \(\texttt{"Dienstag"}\) für das Diagramm erstellt wird.
plt.figure()
plt.plot(uhrzeit, besuchszahlen_montag)
plt.plot(uhrzeit, besuchszahlen_dienstag)
plt.show()
Lösung
# Option 1
plt.figure()
plt.plot(uhrzeit, besuchszahlen_montag)
plt.plot(uhrzeit, besuchszahlen_dienstag)
plt.legend(["Montag", "Dienstag"])
plt.show()
# Option 2
plt.figure()
plt.plot(uhrzeit, besuchszahlen_montag, label="Montag")
plt.plot(uhrzeit, besuchszahlen_dienstag, label="Dienstag")
plt.legend()
plt.show()
Sie können den Wert einer Variablen in Diagrammanmerkungen verwenden, indem Sie dem Text eine Variable hinzufügen. Die Funktion \(\texttt{str}\) wandelt dabei einen Zahlwert in Text um.
plt.figure()
plt.plot(x, y)
plt.title("Sample " + str(x[2]) + " Data")
plt.show()