Skip to content

Wie man Fill_between in Matplotlib einfach handhaben kann

Updated on

Datenvisualisierung ist sowohl eine Kunst als auch eine Wissenschaft. Eines der mächtigsten Werkzeuge im Arsenal eines Datenwissenschaftlers ist Matplotlib, eine vielseitige Python-Bibliothek, die eine solide Grundlage für die Erstellung verschiedenster Diagramme, Plots und komplexerer Datenvisualisierungen bietet. Unter den zahlreichen Funktionen sticht eine hervor, die mit ihrer einzigartigen Fähigkeit, Bereiche von Bedeutung in einem Diagramm hervorzuheben - die fill_between-Funktion.

Die fill_between-Funktion kann verwendet werden, um den Bereich zwischen zwei Linien auszufüllen, aber ihre Möglichkeiten gehen über einfache Füllungen hinaus. Mit ein wenig Einfallsreichtum kann sie dazu genutzt werden, bedingte Füllungen zu erstellen, die bestimmte Perioden oder Muster in Ihren Daten hervorheben können. Dieser Artikel zielt darauf ab, eine ausführliche Erklärung darüber zu bieten, wie man die Kraft von fill_between optimal nutzt, um Ihre Matplotlib-Plots zu verbessern und die besten verfügbaren Ressourcen zu übertreffen.

Warum Fill_between in Matplotlib wichtig ist

Die Fähigkeit, Bereiche zwischen Linien in einem Diagramm auszufüllen, bietet eine visuelle Betonung, die Unterschiede, Trends oder Muster in Ihren Daten hervorheben kann. Sie kann dabei helfen, wichtige Bereiche hervorzuheben, die Aufmerksamkeit des Betrachters auf signifikante Datenpunkte zu lenken oder einfach eine ästhetische Note zu Ihren Grafiken hinzufügen. In Kombination mit bedingten Anweisungen kann sie eine neue Ebene der Nützlichkeit erreichen und ermöglicht nuanciertere und spezifischere Hervorhebungen in Ihren Daten.

Das Ausfüllen zwischen Linien: Die Grundlagen

Bevor wir uns mit bedingten Füllungen beschäftigen, wollen wir verstehen, wie fill_between auf einer grundlegenden Ebene funktioniert. Die Funktion nimmt mindestens drei Argumente entgegen:

  1. Die x-Werte: Diese legen die horizontalen Begrenzungen des Fills fest.
  2. Die ersten y-Werte: Diese legen die untere vertikale Begrenzung fest.
  3. Die zweiten y-Werte: Diese legen die obere vertikale Begrenzung fest.

Hier ist ein einfaches Beispiel:

import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
 
plt.plot(x, y1, '-b', label='Sinus')
plt.plot(x, y2, '-r', label='Kosinus')
plt.fill_between(x, y1, y2, color='gray', alpha=0.5)
plt.show()

In diesem Beispiel wird der Bereich zwischen der Sinus- und Kosinusfunktion mit einer grauen Farbe gefüllt.

Einführung von bedingten Füllungen mit where

Die fill_between-Funktion kann auch ein where-Argument akzeptieren. Dieses Argument ermöglicht es Ihnen, eine boolesche Bedingung anzugeben, unter der das Füllen angewendet wird. Mit anderen Worten, das Füllen erfolgt nur dort, wo diese Bedingung True ist.

Nehmen wir nun ein einfaches DataFrame-Beispiel, um dies zu veranschaulichen. Angenommen, wir haben ein DataFrame df mit den Spalten A und B und wir möchten zwischen diesen beiden Linien ausfüllen:

plt.fill_between(df.index, df['A'], df['B'], where=(df['A'] > df['B']), color='gray', alpha=0.5)

Hier wird der Bereich zwischen A und B nur dort gefüllt, wo A größer als B ist.

Das Problem: Bedingtes Füllen zwischen bestimmten Indexwerten

Bei dem Versuch, fill_between mit einer Bedingung zu verwenden, die bestimmte Indexwerte betrifft, können Sie auf einen häufig auftretenden Fehler stoßen. Dies wird gut illustriert durch eine Frage, die von einem Benutzer gestellt wurde, der den Bereich zwischen zwei Linien füllen wollte, aber nur für bestimmte Monate: 'Januar', 'Februar' und 'März'. Ihre ersten Versuche führten entweder zu einem ValueError oder gar keiner Füllung.

Lassen Sie uns dieses Problem genauer betrachten, die Ursache verstehen und nach der Pause eine narrensichere Lösung anbieten.

Verstehen der Ursache des Fehlers

Der Benutzer versuchte fortzufahren und den Bereich zwischen zwei Linien eines DataFrame mit einer Bedingung auf den Indexwerten zu füllen. Genauer gesagt wollten sie das Füllen nur auf die Monate 'Januar', 'Februar' und 'März' anwenden. Dabei traten sie auf ein Problem.

Der ValueError, den sie erhielten, als sie das Schlüsselwort in mit einem Array und einer Liste verwendeten, liegt darin begründet, dass das in-Schlüsselwort in Python überprüft, ob ein Element in einem Iterable enthalten ist. In diesem Fall wurde es jedoch verwendet, um zu prüfen, ob ein Array, das kein Iterable ist, in einer Liste enthalten ist. Diese Operation ist mehrdeutig und wirft daher einen Fehler.

Der Grund, warum ihr zweiter Versuch (bei dem sie den Index in eine Liste umgewandelt und das in-Schlüsselwort verwendet haben) keine Füllung ergab, lag darin, dass die in-Operation immer noch nicht vektorisiert wurde, d.h. elementweise angewendet wurde.

Die Lösung: Vektorisierung der Bedingung mit isin()

Ein Schlüsselkonzept in pandas ist die Vektorisierung, bei der Operationen auf gesamten Arrays anstelle einzelner Elemente ausgeführt werden. Um zwischen Linien bedingt auf bestimmte Indexwerte basierend zu füllen, müssen wir die Bedingung vektorisieren, indem wir die integrierte Methode .isin() von pandas verwenden. Diese Methode überprüft jedes Element des Index des DataFrames auf Übereinstimmung mit einer Liste und gibt eine boolesche Series zurück.

Die richtige Lösung für das Problem des Benutzers wäre daher:

ax.fill_between(x = plotMonths.index,
                y1 = plotMonths['ro laws'],
                y2 = plotMonths['ro ordos'],
                where = plotMonths.index.isin(['Januar', 'Februar', 'März']),
                facecolor = 'lightskyblue',
                alpha = 0.2)

Hier wird where = plotMonths.index.isin(['Januar', 'Februar', 'März']) jedes Element von plotMonths.index mit der Liste ['Januar', 'Februar', 'März'] überprüft und gibt eine boolesche Series zurück. Diese Series wird verwendet, um bedingt zwischen den Linien 'ro laws' und 'ro ordos' zu füllen.

Alternative zu Matplotlib: Daten mit PyGWalker visualisieren

Neben der Verwendung von Matplotlib zur Visualisierung Ihres Pandas-Datenrahmens gibt es eine alternative Open-Source-Python-Bibliothek, die Ihnen dabei helfen kann, Datenvisualisierungen mit Leichtigkeit zu erstellen: PyGWalker (opens in a new tab). Bitte geben Sie die deutsche Übersetzung für diese Markdown-Datei an. Vermeiden Sie die Übersetzung von Code wie: Übersetzen Sie den Inhalt des JSONldScript. Wenn ein Frontmatter vorhanden ist, stellen Sie sicher, dass Sie den "language" -Parameter ebenfalls in "de" übersetzen. Hier ist die Datei:

PyGWalker zur Datenvisualisierung (opens in a new tab)

Es ist nicht mehr nötig, komplizierte Verarbeitungen mit Python-Code durchzuführen. Importieren Sie einfach Ihre Daten und ziehen Sie Variablen per Drag & Drop, um alle Arten von Datenvisualisierungen zu erstellen! Hier ist ein kurzes Demo-Video zur Bedienung:


So verwenden Sie PyGWalker in Ihrem Jupyter Notebook:

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

Alternativ können Sie es in Kaggle Notebook/Google Colab ausprobieren:

PyGWalker in Kaggle Notebook ausführen (opens in a new tab)PyGWalker in Google Colab ausführen (opens in a new tab)PyGWalker auf GitHub ⭐️ geben (opens in a new tab)
PyGWalker in Kaggle Notebook ausführen (opens in a new tab)PyGWalker in Google Colab ausführen (opens in a new tab)PyGWalker auf GitHub ⭐️ geben (opens in a new tab)

PyGWalker basiert auf der Unterstützung unserer Open Source Community. Vergessen Sie nicht, PyGWalker auf GitHub (opens in a new tab) zu besuchen und uns einen Stern zu geben!

Fazit

Die Funktion fill_between in Matplotlib bietet leistungsstarke Funktionen, um Ihren Diagrammen visuelle Betonung zu verleihen. Sie ermöglicht das Ausfüllen zwischen Linien und mit Hilfe des Arguments where kann sie bedingte Füllungen durchführen. Das Verständnis dieser Funktionen und ihrer zugrunde liegenden Prinzipien ist für eine effektive Datenvisualisierung unerlässlich.

Häufig gestellte Fragen

Im Laufe dieses Artikels haben wir uns intensiv mit der Funktion fill_between, deren Verwendung und Implementierung beschäftigt. Hier sind einige häufig gestellte Fragen, um die wichtigsten Punkte zusammenzufassen und zu verstärken:

Q1: Was ist die Funktion fill_between in Matplotlib?

Die Funktion fill_between wird verwendet, um den Bereich zwischen zwei Linien in einem Diagramm auszufüllen. Sie ist ein leistungsstarkes Werkzeug, um Unterschiede, Trends oder Muster in den Daten hervorzuheben.

Q2: Wie kann ich bedingt zwischen Linien auffüllen mit Matplotlib?

Sie können das Argument where in der Funktion fill_between verwenden, um zwischen Linien basierend auf einer Bedingung aufzufüllen. Diese Bedingung sollte eine boolesche Series mit demselben Index wie Ihre x-Werte sein.

Q3: Warum erhalte ich einen ValueError, wenn ich fill_between mit einer Bedingung auf bestimmten Indexwerten verwende?

Dieser Fehler tritt auf, wenn das in-Schlüsselwort von Python verwendet wird, um zu überprüfen, ob ein Array in einer Liste enthalten ist. Um dieses Problem zu lösen, können Sie die Methode .isin() von pandas verwenden, die jedes Element des Indexes des DataFrame mit einer Liste vergleicht und eine boolesche Series zurückgibt.