Verbessere deine Matplotlib Legend und x/y-ticks in Plots

Hallo liebe Python-Interessierte! Ihr wollt eure Matplotlib Legend in euren Liniendiagrammen verbessern und beliebig positionieren?

Im heutigen Python-Tutorial in der Kategorie Python Matplotlib zeige ich euch, wie ihr eure in Matploblib erstellten Liniendiagramme (Matplotlib Plot) auffrisiert. Im Detail lernt ihr, wie ihr eure Matplotlib Legend (die Legende zu eurem Diagramm) an der richtigen Stelle positioniert. Außerdem lernt ihr heute nützliche Tipps und Tricks, wie ihr eure x- und y-ticks (die Einteilungen der Ordinate und Abszisse) nach euren Wünschen gestaltet. Das klingt kompliziert, aber ich kommentiere den Code und ihr könnt das Gelernte sofort in Python für eure Projekte umsetzen. 

Das ist der zweite Blog-Beitrag zu Matplotlib Plots (Liniendiagrammen). Falls ihr noch nicht wisst, wie ihr mit Matplotlib einfache Plots erstellt, empfehle ich euch meinen Blogartikel zu den Matplotlib Plots

Übrigens: Ihr könnt auch mein YouTube-Video zu diesem Blogartikel anschauen:


Voraussetzungen

Python installieren

Ich gehe davon aus, dass ihr Python bereits auf eurem PC installiert habt. Falls ihr noch nicht Python besitzt, keine Panik – das ist kein Hexenwerk. Ihr könnt euch Python bequem auf der Webseite https://www.python.org/ downloaden und installieren. Auf der Homepage findet ihr alle Informationen für alle üblichen Betriebssystemen (wie z. B. Windows,  Mac OS x und Linux/Unix).

Ihr könnt prüfen, ob die Installation erfolgreich war, indem ihr python in die Kommandozeile eingebt. Bei Windows müsst ihr dafür einfach nur in der Windowssuche „cmd“ eingeben und es öffnet sich das Terminal. Bei Mac OS x reicht die Suche nach Terminal. Sobald ihr in der Kommandozeile python eingegeben habt, sollte euch eure installierte Python-Version (z. B. 3.7.) angezeigt werden.

Matplotlib installieren

Gut, jetzt fehlt nur noch die Installation des Moduls Matplotlib. Dazu müsst ihr ledigilich über die Kommandozeile den folgenden Befehl eingeben, um die Bibliothek über PIP zu installieren:

pip install matplotlib

Wie du deine Matplotlib Legend genau dort platzierst, wo du sie haben möchtest

Import der Daten

Lasst uns mit einem Liniendiagramm beginnen. Es ist sehr stark an das Diagramm vom letzten Tutorial und Blogartikel angelehnt. Das ist der Code: 

# Importieren des Moduls 
from matplotlib import pyplot as plt

# X-Werte
x_alter = [25, 30, 35, 40, 45, 50, 55, 60]
# Y-Werte
y_brutto_durchschnitt = [37109, 45109, 51712, 55495, 57155, 57977, 58094, 58229]
# Plot-Befehl
plt.plot(x_alter, y_brutto_durchschnitt, color='#6a30c5', marker=',', linestyle='--', linewidth='4', label='Durchschnitt')


x_alter = [25, 30, 35, 40, 45, 50, 55, 60]
y_durchschnitt_manager = [73618, 85483, 95888, 108474, 119679, 124509, 127512, 133901]
plt.plot(x_alter, y_durchschnitt_manager, color='#cdeabe', marker='o', linestyle=':', linewidth='7', label='Manager')

# Festlegung der Beschriftung der x-Achse
plt.xlabel('Alter', size='x-large')
# Festlegung der Beschriftung der y-Achse
plt.ylabel('Durchschnittliches Jahreseinkommen', size='x-large')
# Festlegung der Beschriftung der Titels des Diagramms
plt.title('Durchschnittliches Jahreseinkommen in Bezug auf Alter\n Planung', size='xx-large')

plt.legend()

# Gitter aktiviert
plt.grid(True)

# Anzeige unseres Diagramms
plt.show()

Unser Plot zum obigen Code sieht bisher folgendermaßen aus:

Matplotlib Legend Tutorial: Ausgangssitutation Liniendiagramm

Änderung der Position der Matplotlib Legend

Standardmäßig wählt Matplotlib automatisch die bestmögliche Positionierung der Legende für eure Diagramme aus. Das heißt, der Default-Wert der Position ist auf ‚best‘ gewählt. Was aber passiert, wenn ihr ein Diagramm wie das obige erstellt habt und euch die Position in der Mitte stört? Im Bild erkennt ihr die Legende in der Mitte des Plots. Das wirkt weder professionell noch ist das unsere Absicht. 

Um die Matplotlib Legende jetzt links oben (= ‚upper left‘) zu positionieren, müsst ihr folgende Änderung im Code vornehmen:

from matplotlib import pyplot as plt

x_alter = [25, 30, 35, 40, 45, 50, 55, 60]
y_brutto_durchschnitt = [37109, 45109, 51712, 55495, 57155, 57977, 58094, 58229]
plt.plot(x_alter, y_brutto_durchschnitt, color='#6a30c5', marker=',', linestyle='--', linewidth='4', label='Durchschnitt')

x_alter = [25, 30, 35, 40, 45, 50, 55, 60]
y_durchschnitt_manager = [73618, 85483, 95888, 108474, 119679, 124509, 127512, 133901]
plt.plot(x_alter, y_durchschnitt_manager, color='#cdeabe', marker='o', linestyle=':', linewidth='7', label='Manager')


plt.xlabel('Alter', size='x-large')
plt.ylabel('Durchschnittliches Jahreseinkommen', size='x-large')
plt.title('Durchschnittliches Jahreseinkommen in Bezug auf Alter', size='xx-large')

# Ändern der Position der Matplotlib Legend mit loc='...'
plt.legend(loc='upper left')

plt.grid(True)

plt.show()

Wie ihr seht müsst ihr lediglich in der Funktion plt.legend() die Parameter für loc (=Location) festlegen – sehr komfortabel. Das Ergebnis ist das Folgende:

Matplotlib Legend: Position ‚upper left‘

Es gibt aber natürlich noch weitere Platzierungen einer Matplotlib Legende in eurem Diagramm. Hier seht ihr die weiteren möglichen Positionen der Legende: 

Matplotlib Legend: Mögliche Positionen der Legende

Das bedeutet: Wenn eure Legende rechts unten platziert werden sollt, ändert ihr loc auf lower right:

plt.legend(loc='lower right')

Erhöhe die Aussagekraft deiner Plots durch passende x- und y-ticks 

Unser Plot

Der folgende Code ist unsere Ausgangssituation. Wie ihr anhand der x- und y-Daten erkennen könnt stellen wir im Diagramm die Bevölkerungsentwicklung der Weltbevölkerung dar. Wir betrachten die Entwicklung seit 1950.

# Ausgangssituation

from matplotlib import pyplot as plt

x_jahr = [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020]
y_bevoelkerung = [2.54, 3.03, 3.7, 4.46, 5.22, 6.14, 6.96, 7.79]

x_jahr = [1800, 1850, 1900] + x_jahr
y_bevoelkerung = [1.0, 1.262, 1.650] + y_bevoelkerung
plt.plot(x_jahr, y_bevoelkerung, label='Weltbevölkerung', linewidth=5)

plt.xlabel('Jahr', fontsize=20, fontweight="bold", fontstyle='italic', color='g')
plt.ylabel('Bevölkerung', fontsize=20, fontweight="bold", fontstyle='italic', color='g')
plt.title("Entwicklung der Weltbevölkerung seit 1950", fontsize=20, fontweight="bold", fontname='sans-serif')

plt.grid()


plt.show()

Die zugehörige Grafik sieht folgendermaßen aus:

Matplotlib Plot Tutorial: Unser Plot

Vergrößern und Anpassen der x- und y-ticks

Findet ihr nicht auch, dass das Diagramm zu klein ist und vor allem die Beschriftungen der x- und y-ticks (z. B. 1800, 1850,…) nicht gut zu erkennen sind? Gut, dann lasst uns das mit ein paar einfachen Befehlen schnell ändern:


from matplotlib import pyplot as plt

# Vergrößern der Grafik
plt.figure(figsize=(10,6))

x_jahr = [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020]
y_bevoelkerung = [2.54, 3.03, 3.7, 4.46, 5.22, 6.14, 6.96, 7.79]

x_jahr = [1800, 1850, 1900] + x_jahr
y_bevoelkerung = [1.0, 1.262, 1.650] + y_bevoelkerung
plt.plot(x_jahr, y_bevoelkerung, label='Weltbevölkerung', linewidth=5)

plt.xlabel('Jahr', fontsize=20, fontweight="bold", fontstyle='italic', color='g')
plt.ylabel('Bevölkerung', fontsize=20, fontweight="bold", fontstyle='italic', color='g')
plt.title("Entwicklung der Weltbevölkerung seit 1950", fontsize=20, fontweight="bold", fontname='sans-serif')
# Ändern der Schriftgröße (fontsize) und der Schriftdicke (fontweight) der x- und y-ticks
plt.xticks(fontsize=16, fontweight="normal")
plt.yticks(fontsize=16, fontweight="normal")

plt.grid()


plt.show()

Matplotlib: Anpassen der x- und y-Ticks

Übergabe neuer, individueller Werte für der x- und y-ticks

Möglicherweise möchten wir die Bevölkerung auf der y-Achse etwas näher betrachten und nicht Schritte von 1 Mrd. verwenden. Die Einteilung der y-ticks erstellt zwar Matplotlib, kann aber jederzeit vom Nutzer angepasst werden: 

from matplotlib import pyplot as plt

plt.figure(figsize=(10,6))

x_jahr = [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020]
y_bevoelkerung = [2.54, 3.03, 3.7, 4.46, 5.22, 6.14, 6.96, 7.79]

x_jahr = [1800, 1850, 1900] + x_jahr
y_bevoelkerung = [1.0, 1.262, 1.650] + y_bevoelkerung
plt.plot(x_jahr, y_bevoelkerung, label='Weltbevölkerung', linewidth=5)

plt.xlabel('Jahr', fontsize=20, fontweight="bold", fontstyle='italic', color='g')
plt.ylabel('Bevölkerung', fontsize=20, fontweight="bold", fontstyle='italic', color='g')
plt.title("Entwicklung der Weltbevölkerung seit 1950", fontsize=20, fontweight="bold", fontname='sans-serif')
# Übergabe der neuen y-Ticks-Werte
plt.yticks([0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8], fontsize=16, fontweight="normal")
plt.xticks(fontsize=16, fontweight="normal")
plt.grid()


plt.show()

Matplotlib ticks anpassen

Vielleicht möchtet ihr eure Einheiten neben direkt in die y-ticks packen und euch so z. B. 2,5 Milliarden anzeigen lassen. Gibt es denn da eine bequeme Möglichkeit, wie man das in Matplotlib realisieren kann? Ja, die gibt es. Ihr müsst bei der Beschreibung der y-ticks lediglich die Abstufungen als erste Liste (eine Liste ist in Python durch das [] symbolisiert) und die neuen Beschriftungen als zweite Liste übergeben. Das sieht dann so aus:

from matplotlib import pyplot as plt

plt.figure(figsize=(10,6))

x_jahr = [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020]
y_bevoelkerung = [2.54, 3.03, 3.7, 4.46, 5.22, 6.14, 6.96, 7.79]

x_jahr = [1800, 1850, 1900] + x_jahr
y_bevoelkerung = [1.0, 1.262, 1.650] + y_bevoelkerung
plt.plot(x_jahr, y_bevoelkerung, label='Weltbevölkerung', linewidth=5)

plt.xlabel('Jahr', fontsize=20, fontweight="bold", fontstyle='italic', color='g')
plt.ylabel('Bevölkerung', fontsize=20, fontweight="bold", fontstyle='italic', color='g')
plt.title("Entwicklung der Weltbevölkerung seit 1950", fontsize=20, fontweight="bold", fontname='sans-serif')
# Übergabe der neuen y-Ticks-Werte
plt.yticks([0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8], ['0,5 Mrd.', '1 Mrd', '1.5 Mrd.', '2 Mrd.', '2.5 Mrd.', '3 Mrd.',\
'3.5 Mrd.', '4 Mrd.', '4.5 Mrd.',
'5 Mrd.', '5.5 Mrd.', '6 Mrd.',
'6.5 Mrd.', '7 Mrd.', '7.5 Mrd.',
'8 Mrd.'], fontsize=16, fontweight="normal")
plt.xticks(fontsize=16, fontweight="normal")
plt.grid()


plt.show()

Matplotlib ticks: Individuelle Ticks und Beschriftungen der y-Achse


Meine Empfehlung: Falls ihr noch keinerlei Kenntnisse in der Python-Programmierung habt und unbedingt Python lernen möchtet: Startet durch mit dem Online-Kurs Python Programming Bootcamp von Derek Banas. Ich habe den Kurs auch besucht und durchgearbeitet. Ich kann euch diesen Kurs wirklich ans Herz legen, weil er meiner Meinung nach der beste und einer der umfangreichsten Python-Kurse bei Udemy ist. Der Kurs dauert über 20 Stunden und bietet einen qualitativ hochwertigen Einstieg in die (objektorientierte) Programmierung mit Python. Derek hat seine Videos so gestaltet, dass er ohne lange Umschweife die wichtigsten Inhalte präzise an Hand von Codebeispielen erklärt. Er bettet viele, interaktive Übungsaufgaben ein, sodass ihr euren Fortschritt regelmäßig überprüfen könnt.

Neben Grundlagen wie Funktionen, Klassen, Schleifen, usw. werdet ihr ebenfalls lernen, wie SQLite funktioniert und wie ihr grafische Benutzeroberflächen (GUIs) programmiert. Außerdem lernt ihr das Webframework Django kennen.

Also nichts wie los, das ist eure Chance bei Python so richtig durchzustarten! Ich bin mir sicher, dass ihr nicht enttäuscht werdet und eure Lernfortschritte durch die Decke gehen werden! Klickt direkt auf das Bild, das euch zum Kurs bringt und sichert euch den tollen Udemy-Kurs*:

————————————————————————————————————————————

Tolle Bücher und Kurse* zum Python lernen (speziell für Programmier-Einsteiger)

Meine Empfehlung: Falls ihr noch keinerlei Kenntnisse in der Python-Programmierung habt oder aber von einer anderen Programmiersprache umsteigen möchtet: Startet durch mit dem Online-Kurs Python Programming Bootcamp von Derek Banas. Ich habe den Kurs auch besucht und durchgearbeitet. Ich kann euch diesen Kurs wirklich ans Herz legen, weil er meiner Meinung nach der beste und einer der umfangreichsten Python-Kurse bei Udemy ist. Der Kurs dauert über 20 Stunden und bietet einen qualitativ hochwertigen Einstieg in die (objektorientierte) Programmierung mit Python. Derek hat seine Videos so gestaltet, dass er ohne lange Umschweife die wichtigsten Inhalte präzise an Hand von Codebeispielen erklärt. Er bettet viele, interaktive Übungsaufgaben ein, sodass ihr euren Fortschritt regelmäßig überprüfen könnt.

Neben Grundlagen wie Funktionen, Klassen, Schleifen, usw. werdet ihr ebenfalls lernen, wie SQLite funktioniert und wie ihr grafische Benutzeroberflächen (GUIs) programmiert. Außerdem lernt ihr das Webframework Django kennen.

Also nichts wie los, das ist eure Chance bei Python so richtig durchzustarten! Ich bin mir sicher, dass ihr nicht enttäuscht werdet und eure Lernfortschritte durch die Decke gehen werden! Klickt direkt auf das Bild, das euch zum Kurs bringt und sichert euch den tollen Udemy-Kurs*:

 

————————————————————————————————————————————

Vielen Dank für euer Interesse. Bis zum nächsten Artikel auf

Python programmieren mit Maximilian

Alle mit * gekennzeichneten Links sind Affiliate-Links.

Speichere in deinen Favoriten diesen permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.