API-Änderungen für 3.9.0#
Verhaltensänderungen#
Das Kurzformat von plot() interpretiert "Cn" (n>9) als eine Farbe aus dem Farbzyklus#
Zuvor wurde plot(..., "-C11") als Aufforderung zu einem Plot mit dem Linienstil "-", der Farbe "C1" (Farbe Nr. 1 des Farbzyklus) und dem Marker "1" ("tri-down") interpretiert. Nun wird es als Aufforderung zu einem Plot mit dem Linienstil "-" und der Farbe "C11" (Farbe Nr. 11 des Farbzyklus) interpretiert.
Es wird empfohlen, mehrdeutige Marker (wie "1") explizit über das Schlüsselwortargument marker zu übergeben. Wenn das Kurzformat gewünscht ist, können solche Marker auch eindeutig gesetzt werden, indem sie vor den Farbstring gestellt werden.
Legendenbeschriftungen für plot#
Zuvor wurde, wenn eine Sequenz an den Parameter label von plot übergeben wurde, während ein einzelnes Dataset geplottet wurde, die Sequenz automatisch in einen String für die Legendenbeschriftung umgewandelt. Nun, wenn die Sequenz nur ein Element hat, wird dieses Element die Legendenbeschriftung sein. Um das alte Verhalten beizubehalten, wandeln Sie die Sequenz vor der Übergabe in einen String um.
Boxplots ignorieren nun maskierte Datenpunkte#
boxplot und boxplot_stats ignorieren nun alle maskierten Punkte in den Eingabedaten.
axhspan und axvspan geben nun Rectangles und keine Polygons mehr zurück#
Diese Änderung ermöglicht die Verwendung von axhspan zum Zeichnen eines Rings auf polaren Achsen.
Diese Änderung betrifft auch andere Elemente, die über axhspan und axvspan erstellt werden, wie z.B. Slider.poly.
Verbesserte Handhabung von Pan/Zoom-Ereignissen überlappender Achsen#
Die Weiterleitung von Pan/Zoom-Ereignissen wird nun durch die Sichtbarkeit des Hintergrund-Patches (z.B. ax.patch.get_visible()) und durch den zorder der Achsen bestimmt.
Achsen mit einem sichtbaren Patch fangen das Ereignis ab und leiten es nicht an Achsen darunter weiter. Nur die Achsen mit dem höchsten
zorder, die das Ereignis enthalten, werden ausgelöst (wenn mehrere Achsen den gleichenzorderhaben, zählt die zuletzt hinzugefügte Achse).Achsen mit einem unsichtbaren Patch sind auch für Ereignisse unsichtbar und diese werden an die Achsen darunter weitergeleitet.
Um das Standardverhalten zu überschreiben und explizit festzulegen, ob eine Achse Navigationsereignisse weiterleiten soll, verwenden Sie Axes.set_forward_navigation_events.
loc='best' für legend berücksichtigt nun Text und PolyCollections#
Die Standortauswahl für legend berücksichtigt nun die Existenz von Text und PolyCollections bei der Berechnung der "Schlechtigkeit" (badness).
Hinweis: Die Option best kann bei Plots mit großen Datenmengen bereits recht langsam sein. Für PolyCollections werden nur die Path von PolyCollections und nicht der eingeschlossene Bereich bei der Überprüfung auf Überlappungen berücksichtigt, um zusätzliche Latenz zu reduzieren. Sie kann jedoch immer noch recht langsam sein, wenn viele PolyCollections im Plot vorhanden sind, die überprüft werden müssen.
Ausnahme beim Nicht-Übergeben eines Bbox an BboxTransform*-Klassen#
Die Ausnahme, die ausgelöst wird, wenn kein Bbox an BboxTransform*-Klassen übergeben wird, die einen erwarten (z.B. BboxTransform), hat sich von ValueError zu TypeError geändert.
Der loc-Parameter von Cell akzeptiert nicht mehr None#
Der Standardwert des loc-Parameters wurde von None auf right geändert, was bereits die Standardposition war. Das Verhalten von Cell hat sich nicht geändert, wenn es ohne expliziten loc-Parameter aufgerufen wird.
ContourLabeler.add_label berücksichtigt nun use_clabeltext#
... und setzt Text.set_transform_rotates_text entsprechend.
Line2D#
Beim Erstellen einer Line2D oder bei der Verwendung von Line2D.set_xdata und Line2D.set_ydata ist die Übergabe von x/y-Daten als Nicht-Sequenz nun ein Fehler.
ScalarMappables skalieren ihre Norm automatisch, wenn ein Array gesetzt wird#
Collections verzögerten zuvor die automatische Skalierung der Norm bis zum Zeichenzeitpunkt. Dies wurde geändert, um die Norm immer dann zu skalieren, wenn das erste Array gesetzt wird, um mit der Dokumentation übereinzustimmen und unerwartetes Verhalten beim Zugriff auf die Norm vor dem Zeichnen zu reduzieren.
SubplotParams wurde von matplotlib.figure nach matplotlib.gridspec verschoben#
Es ist weiterhin von matplotlib.figure importierbar, sodass keine Änderungen am bestehenden Code erforderlich sind.
PowerNorm schneidet Werte unterhalb von vmin nicht mehr ab#
Wenn clip=False (der Standardwert) bei PowerNorm gesetzt ist, werden Werte unterhalb von vmin nun linear normalisiert. Zuvor wurden sie auf Null abgeschnitten. Dies behebt Probleme mit der Anzeige von Farbleisten, die mit einer Power-Norm verbunden sind.
Semantik von Bildpfaden von Toolmanager-basierten Werkzeugen#
Zuvor versuchten MEP22 ("toolmanager-based") Tools, ihr Symbol (tool.image) relativ zum aktuellen Arbeitsverzeichnis zu laden oder als Fallback aus Matplotlibs eigenem Bildverzeichnis. Da beide Ansätze für Drittanbieter-Tools problematisch sind (der Endbenutzer kann das aktuelle Arbeitsverzeichnis jederzeit ändern, und Drittanbieter können keine neuen Symbole im Bildverzeichnis von Matplotlib hinzufügen), ist dieses Verhalten veraltet. Stattdessen wird tool.image nun relativ zu dem Verzeichnis interpretiert, das die Quelldatei enthält, in der das Klassenattribut Tool.image definiert ist. (Die Definition von tool.image als absoluter Pfad funktioniert ebenfalls und ist sowohl mit der alten als auch mit der neuen Semantik kompatibel.)
Veralterungen#
plot_date#
Die Verwendung von plot_date wird seit Matplotlib 3.5 nicht mehr empfohlen und die Funktion ist nun formell veraltet.
datetime-ähnliche Daten sollten direkt mitplotgeplottet werden.Wenn Sie reine numerische Daten als Matplotlib Datumsformat plotten oder eine Zeitzone festlegen müssen, rufen Sie
ax.xaxis.axis_date/ax.yaxis.axis_dateauf, bevor Sieplotaufrufen. SieheAxis.axis_date.
Legendenbeschriftungen für plot#
Zuvor wurde, wenn eine Sequenz an den label-Parameter von plot übergeben wurde, während ein einzelnes Dataset geplottet wurde, die Sequenz automatisch in einen String für die Legendenbeschriftung umgewandelt. Dieses Verhalten ist nun veraltet und wird zukünftig einen Fehler auslösen, wenn die Länge der Sequenz nicht eins ist (konsistent mit dem Verhalten für mehrere Datensätze, bei dem die Anzahl der Elemente mit der Anzahl der Datensätze übereinstimmen muss). Um das alte Verhalten beizubehalten, wandeln Sie die Sequenz vor der Übergabe in einen String um.
boxplot Tick-Labels#
Der Parameter labels wurde zur besseren Klarheit und Konsistenz mit bar in tick_labels umbenannt.
Mischen von positionsbezogenen und schlüsselwortbezogenen Argumenten für legend Handles und Labels#
Dies löste bisher nur eine Warnung aus, ist aber nun formell veraltet. Wenn handles und labels übergeben werden, müssen sie entweder beide positionsbezogen oder beide als Schlüsselwort übergeben werden.
Anwendung von Theta-Transformationen in PolarTransform#
Die Anwendung von Theta-Transformationen in PolarTransform und InvertedPolarTransform ist veraltet und wird in einer zukünftigen Version von Matplotlib entfernt. Dies ist derzeit das Standardverhalten, wenn diese Transformationen extern verwendet werden, wirkt sich jedoch nur aus, wenn
Eine Achse mit der Transformation verknüpft ist.
Die Achse einen Theta-Offset ungleich Null hat oder wenn Theta-Werte in einer Clockwise-Richtung zunehmen.
Um diese Warnung zu unterdrücken und das zukünftige Verhalten zu übernehmen, setzen Sie apply_theta_transforms=False. Wenn Sie das Verhalten beibehalten möchten, bei dem Theta-Werte transformiert werden, verketten Sie die PolarTransform mit einer Affine2D-Transformation, die die Theta-Verschiebung und/oder Vorzeichenverschiebung durchführt.
interval-Parameter von TimerBase.start#
Das Setzen des Timer-interval beim Starten ist veraltet. Das Intervall kann stattdessen im Timer-Konstruktor angegeben oder durch Setzen des Attributs timer.interval geändert werden.
nth_coord-Parameter für axisartist-Helfer für feste Achsen#
Hilfs-APIs in axisartist zum Erzeugen einer "festen" Achse auf rechtwinkligen Achsen (FixedAxisArtistHelperRectilinear) akzeptieren keinen nth_coord-Parameter mehr, da dieser Parameter vollständig aus dem (erforderlichen) loc-Parameter abgeleitet wird und inkonsistente nth_coord und loc ein Fehler sind.
Für gekrümmte Achsen bleibt der nth_coord-Parameter unterstützt (er beeinflusst die Ticks, nicht die Achsenposition selbst), wird aber für Konsistenz mit dem rechtwinkligen Fall zu einem schlüsselwortbasierten Argument.
rcsetup.interactive_bk, rcsetup.non_interactive_bk und rcsetup.all_backends#
... sind veraltet und werden durch matplotlib.backends.backend_registry.list_builtin mit den folgenden Argumenten ersetzt:
matplotlib.backends.BackendFilter.INTERACTIVEmatplotlib.backends.BackendFilter.NON_INTERACTIVENone
jeweils.
Sonstige Veralterungen#
backend_ps.get_bbox_headerwird als internes Hilfsmittel betrachtetBboxTransformToMaxOnly; wenn Sie sich darauf verlassen, erstellen Sie bitte eine Kopie des Codes.ContourLabeler.add_label_clabeltextTransformNode.is_bbox; stattdessen prüfen Sie das Objekt mitisinstance(..., BboxBase).GridHelperCurveLinear.get_tick_iterator
Entfernungen#
Top-Level-Funktionen zur Registrierung und zum Zugriff auf Colormaps in mpl.cm#
Im Rahmen der mehrstufigen Refaktorierung der Colormap-Registrierung wurden die folgenden Funktionen entfernt:
matplotlib.cm.get_cmap; verwenden Sie stattdessenmatplotlib.colormaps[name], wenn Sie einenstrhaben.Verwenden Sie
matplotlib.cm.ColormapRegistry.get_cmap, wenn Sie einenstr,Noneoder einmatplotlib.colors.Colormap-Objekt haben, das Sie in einColormap-Objekt konvertieren möchten.matplotlib.cm.register_cmap; verwenden Sie stattdessenmatplotlib.colormaps.register.matplotlib.cm.unregister_cmap; verwenden Sie stattdessenmatplotlib.colormaps.unregister.matplotlib.pyplot.register_cmap; verwenden Sie stattdessenmatplotlib.colormaps.register.
Die Funktion matplotlib.pyplot.get_cmap bleibt aus Kompatibilitätsgründen erhalten.
Konturlinienbeschriftungen#
contour.ClabelText und ContourLabeler.set_label_props wurden entfernt. Verwenden Sie Text(..., transform_rotates_text=True) als Ersatz für contour.ClabelText(...) und text.set(text=text, color=color, fontproperties=labeler.labelFontProps, clip_box=labeler.axes.bbox) als Ersatz für ContourLabeler.set_label_props(label, text, color).
Die Attribute labelFontProps, labelFontSizeList und labelTextsList von ContourLabeler wurden entfernt. Verwenden Sie stattdessen das Attribut labelTexts und die Schriftarteigenschaften der entsprechenden Textobjekte.
num2julian, julian2num und JULIAN_OFFSET#
... des Moduls dates wurden ohne Ersatz entfernt. Diese waren undokumentiert und nicht exportiert.
Julianische Daten in Matplotlib wurden aus einer julianischen Datums-Epoche berechnet: jdate = (date - np.datetime64(EPOCH)) / np.timedelta64(1, 'D'). Umgekehrt wurde ein julianisches Datum als date = np.timedelta64(int(jdate * 24 * 3600), 's') + np.datetime64(EPOCH) in ein Datum konvertiert. Matplotlib verwendete EPOCH='-4713-11-24T12:00', sodass der 01.01.2000 um 12:00 Uhr 2_451_545.0 ist (siehe https://en.wikipedia.org/wiki/Julian_day).
offsetbox-Methoden#
offsetbox.bbox_artist wurde entfernt. Dies war nur ein Wrapper zum Aufruf von patches.bbox_artist, wenn ein Flag in der Datei gesetzt ist, verwenden Sie es also direkt, wenn Sie das Verhalten benötigen.
OffsetBox.get_extent_offsets und OffsetBox.get_extent wurden entfernt; diese Methoden sind auch bei allen Unterklassen von OffsetBox entfernt. Um die Extents des OffsetBox zu erhalten, verwenden Sie anstelle von get_extent OffsetBox.get_bbox, das direkt eine Bbox-Instanz zurückgibt. Um auch die Child-Offsets zu erhalten, rufen Sie anstelle von get_extent_offsets separat get_offset für jedes Kind auf, nachdem ein Zeichnen ausgelöst wurde.
parse_fontconfig_pattern löst bei unbekannten Konstantenamen Fehler aus#
Zuvor wurde bei einem Fontconfig-Pattern wie DejaVu Sans:foo der unbekannte Konstantename foo stillschweigend ignoriert. Dies löst nun einen Fehler aus.
tri-Untermodule#
Die Untermodule matplotlib.tri.* wurden entfernt. Die gesamte Funktionalität ist direkt in matplotlib.tri verfügbar und sollte von dort importiert werden.
Widget-API#
CheckButtons.rectanglesundCheckButtons.lineswurden entfernt;CheckButtonszeichnet sich nun selbst mitscatter.RadioButtons.circleswurde entfernt;RadioButtonszeichnet sich nun selbst mitscatter.MultiCursor.needclearwurde ohne Ersatz entfernt.Der ungenutzte Parameter x für
TextBox.begin_typingwar ein erforderliches Argument und wurde nun entfernt.
Die meisten Argumente für Widgets wurden zu schlüsselwortbasierten Argumenten#
Die Übergabe aller bis auf die allerersten Argumente positionsbezogen in den Konstruktoren von Widgets ist nun schlüsselwortbasiert. Im Allgemeinen sind alle optionalen Argumente schlüsselwortbasiert.
API von Axes3D#
Axes3D.unit_cube,Axes3D.tunit_cubeundAxes3D.tunit_edgeswurden ohne Ersatz entfernt.axes3d.vvec,axes3d.eye,axes3d.sxundaxes3d.sywurden ohne Ersatz entfernt.
Inkonsistente nth_coord und loc übergeben an _FixedAxisArtistHelperBase#
Der Wert des Parameters nth_coord von _FixedAxisArtistHelperBase und seinen Unterklassen wird nun aus dem Wert von loc abgeleitet; die Übergabe inkonsistenter Werte (z.B. Anfordern einer "oberen y-Achse" oder einer "linken x-Achse") hat keine Auswirkung mehr.
Übergabe von undefiniertem label_mode an Grid#
... ist nicht mehr erlaubt. Dies schließt mpl_toolkits.axes_grid1.axes_grid.Grid, mpl_toolkits.axes_grid1.axes_grid.AxesGrid und mpl_toolkits.axes_grid1.axes_grid.ImageGrid ein, sowie die entsprechenden Klassen, die aus mpl_toolkits.axisartist.axes_grid importiert wurden.
Übergeben Sie stattdessen label_mode='keep', um das vorherige Verhalten beizubehalten, dass Labels nicht modifiziert werden.
draw_gouraud_triangle#
... wird entfernt. Verwenden Sie stattdessen draw_gouraud_triangles.
Ein draw_gouraud_triangle-Aufruf in einem benutzerdefinierten Artist kann einfach ersetzt werden als
self.draw_gouraud_triangles(gc, points.reshape((1, 3, 2)),
colors.reshape((1, 3, 4)), trans)
Eine draw_gouraud_triangles-Methode kann aus einer vorhandenen draw_gouraud_triangle-Methode implementiert werden als
transform = transform.frozen()
for tri, col in zip(triangles_array, colors_array):
self.draw_gouraud_triangle(gc, tri, col, transform)
Sonstige Entfernungen#
Die folgenden Elemente wurden zuvor ersetzt und sind nun entfernt
Der Parameter ticklabels von
matplotlib.axis.Axis.set_ticklabelswurde in labels umbenannt.Barbs.barbs_docundQuiver.quiver_docwerden entfernt. Dies sind die Docstrings und sollten nicht als benanntes Klassenmitglied zugänglich sein, sondern wie normale Docstrings.collections.PolyCollection.span_whereundcollections.BrokenBarHCollection; verwenden Sie stattdessenfill_between.Legend.legendHandleswar undokumentiert und wurde inlegend_handlesumbenannt.
Die folgenden Elemente wurden ohne Ersatz entfernt
Die Attribute
repeatvonTimedAnimationund Unterklassen sowiesave_countvonFuncAnimationgelten als privat und wurden entfernt.matplotlib.backend.backend_agg.BufferRegion.to_stringmatplotlib.backend.backend_agg.BufferRegion.to_string_argbmatplotlib.backends.backend_ps.PsBackendHelpermatplotlib.backends.backend_webagg.ServerThreadDer Parameter raw von
GridSpecBase.get_grid_positionsmatplotlib.patches.ConnectionStyle._Base.SimpleEventpassthru_ptAttribut vonmpl_toolkits.axisartist.AxisArtistHelper
Entwicklungsänderungen#
Build-System auf Meson umgestellt#
Das Build-System von Matplotlib wurde von setuptools auf meson-python und Meson portiert. Folglich gab es einige Änderungen für Entwicklungs- und Verpackungszwecke.
Die Installation von Paketen mit
pyproject.tomlperpipverwendet standardmäßig Build-Isolation, was mit der bearbeitbaren Installation interferiert. Daher ist es für Entwickler, die bearbeitbare Installationen verwenden, nun notwendig, das Flag--no-build-isolationanpip installzu übergeben. Das bedeutet, dass alle Build-Abhängigkeiten in der Umgebung für eine bearbeitbare Installation verfügbar sein müssen.Die Build-Konfiguration wurde von einer benutzerdefinierten
mplsetup.cfg(auch konfigurierbar über die UmgebungsvariableMPLSETUP) auf Meson-Optionen verlagert. Diese können über Meson-Pythons Build-Konfigurationseinstellungen fürsetup-argsspezifiziert werden. Sehen Sie sichmeson_options.txtfür alle Optionen an. Zum Beispiel kann einemplsetup.cfg, die Folgendes enthält:[rc_options] backend=Agg [libs] system_qhull = True
kann durch Übergabe der folgenden Argumente an
pipersetzt werden--config-settings=setup-args="-DrcParams-backend=Agg" --config-settings=setup-args="-Dsystem-qhull=true"
Beachten Sie, dass Sie
pip>= 23.1 verwenden müssen, um mehr als eine Einstellung übergeben zu können.In ähnlicher Weise werden nun Mesons eingebaute Optionen anstelle von benutzerdefinierten Optionen verwendet, z. B. ist die LTO-Option nun
b_lto.Unter Windows aktiviert Meson automatisch eine Visual Studio-Umgebung. Dies geschieht jedoch nicht, wenn ein anderer Compiler verfügbar ist. Sehen Sie sich die Dokumentation von Meson an, wenn Sie die Priorität der gewählten Compiler ändern möchten.
Die Installation von Testdaten wurde zuvor durch
mplsetup.cfggesteuert, wurde aber nun auf Mesons Installationstags verlagert. Um Testdaten zu installieren, fügen Sie das Tagtestszur angeforderten Installation hinzu (stellen Sie sicher, dass Sie die vorhandenen Tags wie unten angegeben einschließen)--config-settings=install-args="--tags=data,python-runtime,runtime,tests"
Die Überprüfung von Typisierungshinweisen mit
stubtestfunktioniert bei bearbeitbaren Installationen nicht einfach. Vorerst empfehlen wir eine normale (nicht bearbeitbare) Installation, wenn Siestubtestausführen möchten.
Erhöhung der minimal unterstützten Versionen von Abhängigkeiten.
Für Matplotlib 3.9 werden die minimal unterstützten Versionen angehoben
Abhängigkeit |
min in mpl3.8 |
min in mpl3.9 |
|---|---|---|
NumPy |
1.21.0 |
1.23.0 |
setuptools |
42 |
64 |
Dies entspricht unserer Richtlinie für Mindestabhängigkeiten und SPEC 0.
Um die Anforderungen von setuptools_scm zu erfüllen, wurde die Mindestversion von setuptools von 42 auf 64 erhöht.
Erweiterungen erfordern C++17#
Matplotlib benötigt nun einen Compiler, der C++17 unterstützt, um seine Erweiterungen zu kompilieren. Laut Scipy-Analyse sollte dies auf allen unterstützten Plattformen verfügbar sein.
Unterstützung für Windows auf ARM64#
Windows auf ARM64 bündelt nun FreeType 2.6.1 anstelle von 2.11.1 beim Kompilieren aus dem Quellcode. Dies kann zu kleinen Änderungen bei der Textdarstellung führen, sollte aber mit allen anderen Plattformen konsistent sein.