In diesem Module lernen Sie einfache Diagramme wie Liniendiagramme oder Balkendiagramme mit Python und der Bibliothek Matplotlib erstellen.
Um die matplotlib zu Nutzen müssen Sie das package pyplot importieren. Dies geschieht mit der Anweisung import matplotlib.pyplot as plt
. Dabei wird plt
als ALias für pyplot verwendet. Ein Diagramm wird mit der plot
-Methode erstellt. Die Methode plt.show()
zeigt das Diagramm an. Die matplotlib bietet auch die Möglichkeit Diagramme abzuspeichern, dies geschieht mit plt.savefig(filename)
.
import matplotlib.pyplot as plt
plt.plot([1,2,4,8,16]) # plottet angegebene 5 Zahlen mit Standardabstand
plt.show() # Zeichnet den Plot
# TODO: Speichern Sie das Diagramm ab
Im folgenden Beispiel werden zwei kleinere Datensätze visualisiert. Mit xlabel(...)
und ylabel(...)
werden die Achsenbeschriftungen erstellt. Die Methode legend(...)
zeigt die Namen der Datenreihen an.
data_d = {
1555: 3_500,
1703: 7_000,
1791: 9_541,
1900: 213_711,
1940: 542_800,
1990: 575_794,
2019: 621_877
} # Quelle: https://de.wikipedia.org/wiki/Einwohnerentwicklung_von_D%C3%BCsseldorf
data_k = {
1600: 40_000,
1714: 42_015,
1810: 45_029,
1900 : 372_229,
1930: 740_082,
1960: 803_616,
2019: 1_087_863
} # Quelle: https://de.wikipedia.org/wiki/Einwohnerentwicklung_von_K%C3%B6ln
plt.plot(list(data_d.keys()), list(data_d.values()), label='Düsseldorf')
plt.plot(list(data_k.keys()), list(data_k.values()), label='Köln')
plt.ylabel("Einwohnerzahl")
plt.xlabel("Jahr")
plt.title("Entwicklung der Einwohnerzahlen von Düsseldorf und Köln")
plt.legend()
plt.show()
Gegeben sind folgende Daten in der Variable data. Stellen Sie die Felder x und y in einem Liniendiagramm da.
data = {
1714: 2.983,
1784: 3.531,
1820:5.936,
1875:36.580,
1905:110.317,
1922: 260.169,
1935: 439.627,
1971:448.791,
1989: 532.152,
2018:498.590} # Quelle: https://de.wikipedia.org/wiki/Einwohnerentwicklung_von_Duisburg
Das Diagramm soll in etwa wiefolgt aussehen
Eine ausführliche Dokumentation der plot-Methode findet sich hier: https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.plot.html
# Normalerweise werden die Wertebereiche der X- und Y-Achse automatsich bestimmt.
# Wenn man mehrere Diagramme verwendet kann es übersichtlicher sein, diese Werte manuell zu setzen
plt.plot(range(5))
plt.plot([4,4,5,6,7])
plt.xlim(0, 5)
plt.ylim(0, 10)
plt.show()
# Hier zwei Diagramme nebeneinander
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(18,10))
ax2 = plt.subplot(221)
ax2.plot(list(data_d.keys()), list(data_d.values()))
ax2.set_title('Entwicklung der Einwohnerzahlen von Düsseldorf')
ax3 = plt.subplot(222)
ax3.plot(list(data_k.keys()), list(data_k.values()))
ax3.set_title('Entwicklung der Einwohnerzahlen von Köln')
plt.show()
Das Problem bei dieser Darstellung ist, dass es so aussieht als ob Köln und Düsseldorf 2019 die gleiche Einwohnerzahl haben. Dies liegt daran, dass die Y-Achsen unterschiedliche Auflösungen haben. Durch set_ylim()
kann man den Wertebereich der Y-Achse bestimmen. Hier haben Metode beim subplot die Prefix set_
.
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(18,10))
ax2 = plt.subplot(221)
ax2.plot(list(data_d.keys()), list(data_d.values()))
ax2.set_title('Entwicklung der Einwohnerzahlen von Düsseldorf')
ax2.set_ylim(top=1_100_000)
ax2.set_xlabel("Jahr")
ax3 = plt.subplot(222)
ax3.plot(list(data_k.keys()), list(data_k.values()))
ax3.set_title('Entwicklung der Einwohnerzahlen von Köln')
ax3.set_ylim(top=1_100_000)
ax3.set_xlabel("Jahr")
plt.show()
Mit der Methode bar
kann man ein Balkendiagramm erzeugen.
einwohner_2018_l = ('Düsseldorf', 'Köln', 'Duisburg', 'Essen', 'Dortmund')
einwohner_2018_z = [619_294, 1_085_664, 498_590, 583_109, 587_010]
y_pos = [0, 1, 2, 3, 4]
fig, ax = plt.subplots()
ax.set_xticks(range(len(einwohner_2018_l)))
ax.set_xticklabels(einwohner_2018_l, rotation='vertical')
plt.bar(y_pos, einwohner_2018_z, align='center')
plt.show()
Mit dem Parameter color
können Farben für die einzelnen Balken angegeben werden. Mit dem Parameter alpha
kann man die Farben weniger aufdringlich gestalten.
einwohner_2018_l = ('Düsseldorf', 'Köln', 'Duisburg', 'Essen', 'Dortmund')
einwohner_2018_z = [619_294, 1_085_664, 498_590, 583_109, 587_010]
y_pos = [0, 1, 2, 3, 4]
farben = ['#000000', '#dbb243', '#2e42d3', '#e54fe3', '#f23434']
fig, ax = plt.subplots()
ax.set_xticks(range(len(einwohner_2018_l)))
ax.set_xticklabels(einwohner_2018_l, rotation='vertical')
plt.bar(y_pos, einwohner_2018_z, align='center', alpha=0.6, color=farben)
plt.show()
# TODO
Lektion: matplotlib
Version: 2020-10-27