matplotlib

Lernziele

  • Ergebnisse grafisch darstellen

Ergebnisse mit Matplotlib grafisch darstellen

Matplotlib ist ein leistungsstarkes Python-Modul zum Plotten von Ergebnissen. Wir werden das pyplot-Submodul von matplotlib ausgiebig verwenden. Das Folgende ist aus dem offiziellen Pyplot Tutorial übernommen.

Jede pyplot-Funktion nimmt Änderungen an einer Abbildung vor: So gibt es eine Funktionen zum Erstellen der Abbildung, Estellen eines Plotbereichs in einer Abbildung, zeichnen von Linien in einem Plotbereich, Dekorierung des Plot mit Beschriftungen usw. In matplotlib.pyplot wird der Zustand der Abbildung über Funktionsaufrufe hinweg als globaler Zustand des ausführenden Skripts beibehalten.

%matplotlib inline
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])

plt.ylabel('some numbers');

Die erste Zeile %matplotlib inline ist eine sogenannte Magic-Funktion für das Notebook. Sie teilt Jupyter mit, dass die Plots in die Ausgabe des Notizbuchs eingebettet werden und nicht für jeden Plot ein neues Fenster geöffnet wird.

Sie fragen sich vielleicht, warum die x-Achse zwischen 0 und 3 und die y-Achse zwischen 1 und 4 liegt. Wenn Sie dem Befehl plot() eine einzelne Liste oder ein einzelnes Array bereitstellen, geht Matplotlib davon aus, dass es sich um eine Folge von y-Werten handelt, und generiert automatisch die x-Werte für Sie. Da Python-Bereiche mit 0 beginnen, hat der Standard-x-Vektor die gleiche Länge wie y, beginnt aber mit 0. Daher sind die x-Daten „[0,1,2,3]“.

plot() ist ein vielseitiger Befehl und akzeptiert eine beliebige Anzahl von Argumenten. Um beispielsweise x gegen y darzustellen, können Sie den folgenden Befehl eingeben:

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

Für jedes x-y-Argumentenpaar gibt es ein optionales drittes Argument, bei dem es sich um die Formatzeichenfolge handelt, die die Farbe und den Linientyp des Diagramms angibt. Die Buchstaben und Symbole der Formatzeichenfolge stammen aus MATLAB, und Sie verketten eine Farbzeichenfolge mit einer Linienstilzeichenfolge. Die Standardformatzeichenfolge ist b-, eine durchgezogene blaue Linie. Um beispielsweise das Obige mit roten Kreisen darzustellen, würden Sie Folgendes ausgeben:

plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20]);

Eine vollständige Liste der Linienstile und Formatzeichenfolgen finden Sie in der Dokumentation zu plot(). Der Befehl axis() im obigen Beispiel nimmt eine Liste von [xmin, xmax, ymin, ymax] und gibt den Ansichtsbereich der Achsen an.

Wenn Matplotlib auf die Arbeit mit Listen beschränkt wäre, wäre es für die numerische Verarbeitung ziemlich nutzlos. Im Allgemeinen verwenden Sie Numpy-Arrays. Tatsächlich werden alle Sequenzen intern in Numpy-Arrays konvertiert. Das folgende Beispiel zeigt das Plotten mehrerer Linien mit unterschiedlichen Formatstilen in einem Befehl mithilfe von Arrays.

import numpy as np

# gleichmäßig abgetastete Zeit in 200-ms-Intervallen
t = np.arange(0., 5., 0.2)

# rote Striche, blaue Quadrate und grüne Dreiecke
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^');

Diagramme können einfach mit dem Befehl savefig in einer Datei gespeichert werden. Für gerasterte Grafiken (z. B. PNG) können Sie die Option dpi verwenden, um die Ausgabeauflösung anzugeben. Beachten Sie, dass sich der Befehl savefig in derselben Zelle wie der Befehl plot befinden muss (wenn Sie Jupyter verwenden).

plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.savefig('myplot.pdf')
plt.savefig('myplot.png', dpi=300)

Aufgaben

  • Werfen Sie einen Blick auf matplotlib example gallery, um ein Gefühl für die Fähigkeiten von matplotlib zu bekommen.
  • Wählen Sie ein Beispiel mit
    1. beschriftete Achsen
    2. eine Legende.
    Lesen Sie die Quelle, um zu verstehen, wie sie es machen.
  • Verwenden Sie SciPy, um die Wurzel der Funktion zu finden \[f(x) = x+\exp x + \frac{10}{1+x^2} - 5\] Verwenden Sie Matplotlib, um eine gute erste Vermutung zu finden. Was passiert, wenn Sie zunächst eine schlechte Schätzung annehmen, sagen wir \(x_0 = 1,5\)? Warum?
  • Ein Zugversuch an Stahl hat die folgenden Spannungs-Dehnungs-Datenpunkte im linearen Bereich ergeben: python stress = [4,99762687e+10, 5,00334074e+10, 5,00859578e+10, 5.01265455e+10, 5.01975239e+10, 5.02073815e+10, 5.02568815e+10, 5.02578512e+10, 5.03382411e+10, 5.03809123e+10, 5.04067895e+10] strain = [0. , 0,0002, 0,0004, 0,0006, 0,0008, 0,001, 0,0012, 0,0014, 0,0016, 0,0018, 0,002 ] Berechnen Sie die beste lineare Regression, um den Elastizitätsmodul abzuschätzen. Verwenden Sie das verwenden, was Sie über np.linalg gelernt haben. (Hinweis: Wenn Sie vergessen haben, wie man eine lineare Regression berechnet, kann Wikipedia Ihr Freund sein.) Visualisieren Sie das Ergebnis mit matplotlib in einem Diagramm mit beschrifteten Achsen und einer Legende.
  • Lesen Sie mehr über np.polyfit im NumPy-Dokument und verwenden Sie es zur Berechnung des Elastizitätsmoduls des Stahls. Dies ist eine kompaktere Methode.