Was ist neu in Matplotlib 3.1 (18. Mai 2019)#

Eine Liste aller Probleme und Pull-Anfragen seit der letzten Überarbeitung finden Sie in den GitHub-Statistiken für 3.10.3 (08. Mai 2025).

Neue Funktionen#

ConciseDateFormatter#

Der standardmäßig verwendete automatische Datumsformatierer kann sehr ausführlich sein. Ein neuer Formatierer kann aufgerufen werden, der versucht, die Tick-Labels entsprechend prägnant zu gestalten.

(Quellcode, 2x.png, png)

Unterstützung für sekundäre x/y-Achsen#

Eine neue Methode bietet die Möglichkeit, einer bestehenden Achse eine zweite Achse hinzuzufügen über Axes.secondary_xaxis und Axes.secondary_yaxis. Beispiele finden Sie unter Sekundäre Achse.

(Quellcode, 2x.png, png)

FuncScale für beliebige Achsenskalen#

Eine neue Klasse FuncScale (und FuncTransform) wurde hinzugefügt, um dem Benutzer zu ermöglichen, beliebige Skalentransformationen vorzunehmen, ohne eine neue Unterklasse von ScaleBase schreiben zu müssen. Dies kann abgerufen werden durch

ax.set_yscale('function', functions=(forward, inverse))

wobei forward und inverse aufrufbare Funktionen sind, die die Skalentransformation und ihre Umkehrung zurückgeben. Siehe das letzte Beispiel in Übersicht über Skalen.

Legende für Scatterplots#

Eine neue Methode zur Erstellung von Legenden für Scatterplots wurde eingeführt. Zuvor war es, um eine Legende für einen scatter()-Plot zu erhalten, möglich, entweder mehrere Scatterplots mit jeweils einer individuellen Beschriftung zu zeichnen oder Proxy-Künstler zu erstellen, die manuell in der Legende angezeigt werden. Jetzt bietet PathCollection eine Methode legend_elements(), um die Handles und Labels für einen Scatterplot auf automatisierte Weise zu erhalten. Dadurch wird die Erstellung einer Legende für einen Scatterplot so einfach wie

(Quellcode, 2x.png, png)

Ein Beispiel finden Sie unter Automatisierte Legenden-Erstellung.

Matplotlib benötigt nicht mehr die Framework-App-Build auf dem MacOSX-Backend#

Frühere Versionen von Matplotlib erforderten einen Framework-Build von Python, um zu funktionieren. Der App-Typ wurde aktualisiert, um dies nicht mehr zu erfordern, sodass das MacOSX-Backend mit Nicht-Framework-Python funktionieren sollte.

Dies fügt auch Unterstützung für das MacOSX-Backend für PyPy3 hinzu.

Figure, FigureCanvas und Backends#

Figure.frameon ist jetzt ein direkter Proxy für den Sichtbarkeitsstatus des Figure-Patches#

Der Zugriff auf Figure.frameon (einschließlich über get_frameon und set_frameon) leitet jetzt direkt an die Sichtbarkeit des zugrunde liegenden Rectangle-Künstlers weiter (Figure.patch.get_frameon, Figure.patch.set_frameon).

Das Argument pil_kwargs wurde zu savefig hinzugefügt#

Matplotlib verwendet Pillow, um das Speichern in den Formaten JPEG und TIFF zu handhaben. Die Funktion savefig() hat ein Schlüsselwortargument pil_kwargs erhalten, das verwendet werden kann, um Argumente an Pillow's PIL.Image.Image.save weiterzuleiten.

Das Argument pil_kwargs kann auch beim Speichern in PNG verwendet werden. In diesem Fall verwendet Matplotlib ebenfalls PIL.Image.Image.save von Pillow, anstatt seine eigene integrierte PNG-Unterstützung zu verwenden.

Fügen Sie die Methode inaxes zu FigureCanvasBase hinzu#

Die Klasse FigureCanvasBase hat nun eine Methode inaxes, um zu überprüfen, ob sich ein Punkt in einer Achse befindet, und gibt die oberste Achse zurück, andernfalls None.

Das Cairo-Backend verwendet standardmäßig pycairo anstelle von cairocffi#

Dies führt in einigen Fällen zu schnellerer Import-/Laufzeit-Performance. Das Backend wird auf cairocffi zurückfallen, falls pycairo nicht verfügbar ist.

Achsen und Künstler#

axes_grid1 und axisartist Achsen zeichnen keine Rahmen mehr zweimal#

Zuvor wurden die Rahmen von axes_grid1 und axisartist Achsen zweimal gezeichnet, was zu einem "fetten" Erscheinungsbild führte. Dies ist nicht mehr der Fall.

Der Rückgabetyp von ArtistInspector.get_aliases wurde geändert#

ArtistInspector.get_aliases gab zuvor die Menge der Aliase als {fullname: {alias1: None, alias2: None, ...}} zurück. Die Dict-zu-None-Zuordnung wurde in früheren Python-Versionen verwendet, um ein Set zu simulieren. Sie wurde nun durch ein Set ersetzt, d.h. {fullname: {alias1, alias2, ...}}.

Dieser Wert wird auch in ArtistInspector.aliasd gespeichert, die ebenfalls geändert wurde.

ConnectionPatch akzeptiert beliebige Transformationen#

Alternativ zu Strings wie "data" oder "axes fraction" akzeptiert ConnectionPatch jetzt jede Transform als Eingabe für die Argumente coordsA und coordsB. Dies ermöglicht das Zeichnen von Linien zwischen Punkten, die in verschiedenen benutzerdefinierten Koordinatensystemen definiert sind. Siehe auch Verwendung von ConnectionPatch.

mplot3d Line3D erlaubt jetzt {set,get}_data_3d#

Linien, die mit der 3D-Projektion in mplot3d erstellt wurden, können jetzt über get_data_3d() auf die Daten zugreifen, die ein Tupel von Array-Likes mit den (x, y, z)-Daten zurückgibt. Das äquivalente set_data_3d kann verwendet werden, um die Daten einer vorhandenen Line3D zu ändern.

Axes3D.voxels schattiert jetzt die resultierenden Voxel#

Die Methode Axes3D.voxels nimmt jetzt einen Parameter shade entgegen, der standardmäßig auf True gesetzt ist. Dies schattiert Flächen basierend auf ihrer Ausrichtung, ähnlich wie die entsprechenden Parameter für plot_trisurf() und bar3d(). Die folgende Grafik zeigt, wie sich dies auf die Ausgabe auswirkt.

(Quellcode, 2x.png, png)

Achsen und Ticks#

Hinzugefügt: Axis.get_inverted und Axis.set_inverted#

Die Methoden Axis.get_inverted und Axis.set_inverted fragen ab und setzen, ob die Achse eine "invertierte" Ausrichtung verwendet (d.h. für die x-Achse nach links und für die y-Achse nach unten zunehmend).

Sie führen ähnliche Aufgaben aus wie Axes.xaxis_inverted, Axes.yaxis_inverted, Axes.invert_xaxis und Axes.invert_yaxis, mit dem spezifischen Unterschied, dass Axis.set_inverted es einfacher macht, die Invertierung einer Achse festzulegen, unabhängig davon, ob sie zuvor invertiert war.

Standardmäßigen Abstand für kleine Ticks anpassen#

Der standardmäßige Abstand für kleine Ticks wurde von 0,625 auf 0,5 für Haupt-Ticks mit einem Abstand von 2,5 Einheiten geändert.

EngFormatter akzeptiert jetzt usetex, useMathText als nur-Schlüsselwort-Argumente#

Eine öffentliche API wurde zu EngFormatter hinzugefügt, um zu steuern, wie die Zahlen in den Tick-Labels gerendert werden. Standardmäßig evaluiert useMathText zu rcParams["axes.formatter.use_mathtext"] (Standard: False) und usetex evaluiert zu rcParams["text.usetex"] (Standard: False).

Wenn einer davon True ist, werden die Zahlen von $-Zeichen umschlossen. Bei Verwendung von TeX bedeutet dies, dass die Zahlen in der Mathel-Schriftart von TeX angezeigt werden. Bei Verwendung von Mathtext stellen die $-Zeichen um Zahlen eine Unicode-Darstellung sicher (wie von Mathtext impliziert). Dies stellt sicher, dass die Minuszeichen in den Ticks als Unicode-Minus (U+2212) gerendert werden, wenn Mathtext verwendet wird (ohne auf die Methode fix_minus zurückzugreifen).

Animation und Interaktivität#

Unterstützung für Vor-/Zurück-Maustasten#

Figure-Manager unterstützen jetzt ein Ereignis button_press für Maustasten, ähnlich den key_press-Ereignissen. Dies ermöglicht das Binden von Aktionen an Maustasten (siehe MouseButton). Die erste Anwendung dieses Mechanismus ist die Unterstützung von Vor-/Zurück-Maustasten in Figuren, die mit dem Qt5-Backend erstellt wurden.

Argument progress_callback zu save()#

Die Methode Animation.save hat ein optionales Argument progress_callback erhalten, um den Fortschritt beim Speichern zu melden.

Fügen Sie das nur-Schlüsselwort-Argument cache_frame_data in animation.FuncAnimation ein#

matplotlib.animation.FuncAnimation hat standardmäßig Frame-Daten gecacht; dieses Caching ist jedoch in bestimmten Fällen nicht ideal, z.B. wenn FuncAnimation nur interaktiv gezeichnet (nicht gespeichert) werden muss und der benötigte Speicher für die Frame-Daten sehr groß ist. Durch Hinzufügen des nur-Schlüsselwort-Arguments cache_frame_data können Benutzer dieses Caching jetzt deaktivieren; dadurch bietet dieses neue Argument eine Lösung für das Problem #8528.

Endlosschleifen-GIFs mit PillowWriter#

Wir erkennen an, dass die meisten Leute ein GIF mehr als einmal ansehen möchten. Das Speichern einer Animation als GIF mit PillowWriter erzeugt jetzt eine endlos wiederholende GIF-Datei.

Den matplotlib.widgets.Slider angepasst, um eine vertikale Ausrichtung zu haben#

Das Widget matplotlib.widgets.Slider nimmt jetzt ein optionales Argument orientation entgegen, das die Richtung ('horizontal' oder 'vertical') angibt, in der der Schieberegler ausgerichtet sein soll.

Verbesserte Formatierung von Bildwerten unter dem Cursor, wenn eine Farbleiste vorhanden ist#

Wenn eine Farbleiste vorhanden ist, wird deren Formatierer jetzt verwendet, um die Bildwerte unter dem Mauscursor in der Statusleiste zu formatieren. Beispielsweise werden für ein Bild, das die Werte 10.000 und 10.001 anzeigt, in der Statusleiste jetzt (bei Standardeinstellungen) die Werte als 10000 und 10001 angezeigt, während beide Werte zuvor als 1e+04 angezeigt wurden.

Das Attribut button von MouseEvent ist jetzt ein IntEnum#

Das Attribut button von MouseEvent-Instanzen kann die Werte None, 1 (linke Taste), 2 (mittlere Taste), 3 (rechte Taste), "up" (Scrollen) und "down" (Scrollen) annehmen. Zur besseren Lesbarkeit werden die Werte 1, 2 und 3 jetzt mithilfe der Klasse enum.IntEnum matplotlib.backend_bases.MouseButton mit den Werten MouseButton.LEFT (== 1), MouseButton.MIDDLE (== 2) und MouseButton.RIGHT (== 3) dargestellt.

Konfiguration, Installation und Entwicklung#

Die Umgebungsvariable MATPLOTLIBRC kann jetzt auf jeden "Dateipfad" zeigen#

Dies schließt Gerätedateien ein; insbesondere auf Unix-Systemen kann MATPLOTLIBRC auf /dev/null gesetzt werden, um die matplotlibrc-Datei des Benutzers zu ignorieren und auf die Standardeinstellungen von Matplotlib zurückzugreifen.

Zur Erinnerung: Wenn MATPLOTLIBRC auf ein Verzeichnis zeigt, versucht Matplotlib, die matplotlibrc-Datei aus $MATPLOTLIBRC/matplotlibrc zu laden.

Erlauben Sie LaTeX-Code pgf.preamble und text.latex.preamble in der MATPLOTLIBRC-Datei#

Zuvor wurden die rc-Datei-Schlüssel rcParams["pgf.preamble"] (Standard: '') und rcParams["text.latex.preamble"] (Standard: '') mit Kommas als Trennzeichen analysiert. Dies hätte gültigen LaTeX-Code zerstört, wie z.B.

\usepackage[protrusion=true, expansion=false]{microtype}

Die Analyse wurde geändert, um die vollständige Zeile an das LaTeX-System zu übergeben, wobei alle Kommas erhalten bleiben. Das Übergeben einer Liste von Strings aus einem Python-Skript funktioniert weiterhin wie zuvor.

Neue Logging-API#

matplotlib.set_loglevel / pyplot.set_loglevel kann aufgerufen werden, um mehr (oder weniger) detaillierte Logging-Ausgabe anzuzeigen.