API-Änderungen für 3.6.0#
Verhaltensänderungen#
plt.get_cmap und matplotlib.cm.get_cmap geben eine Kopie zurück#
Früher gaben get_cmap und matplotlib.cm.get_cmap eine globale Version eines Colormap zurück. Dies war fehleranfällig, da Änderungen an der Colormap ohne Vorwarnung von einem Ort zum anderen weitergegeben wurden. Jetzt wird eine neue Kopie der Colormap zurückgegeben.
Große imshow-Bilder werden jetzt herunter skaliert#
Beim Anzeigen eines Bildes mit imshow, das mehr als \(2^{24}\) Spalten oder \(2^{23}\) Zeilen hat, wird das Bild jetzt auf unter diese Auflösung herunter skaliert, bevor es für die Anzeige durch den AGG-Renderer neu abgetastet wird. Zuvor wurde ein so großes Bild falsch angezeigt. Um diese Herunterskalierung und die damit verbundene Warnung zu vermeiden, sollten Sie Ihre Daten manuell herunterskalieren, bevor Sie sie an imshow übergeben.
Standard-Datumsbereiche geändert auf 1970-01-01 – 1970-01-02#
Zuvor lag der Standardbereich für eine leere Achse, die für Daten eingerichtet war (Axis.axis_date), von 2000-01-01 bis 2010-01-01. Dies wurde auf 1970-01-01 bis 1970-01-02 geändert. Mit der Standard-Epoche sind die numerischen Grenzen für Datumsachsen nun die gleichen wie für andere Achsen (0,0-1,0), und Benutzer werden seltener einen Locator mit zu vielen Ticks setzen.
markerfmt-Argument für stem#
Das Verhalten des Parameters markerfmt von stem hat sich geändert
Wenn markerfmt keine Farbe enthält, wird die Farbe von linefmt übernommen.
Wenn markerfmt keinen Marker enthält, ist der Standardwert 'o'.
Zuvor wurde markerfmt unverändert an plot(..., fmt) übergeben, was eine Reihe unbeabsichtigter Nebenwirkungen hatte; z. B. führte die Angabe nur einer Farbe zu einer durchgezogenen Linie ohne Marker.
Bei einem einfachen Aufruf von stem(x, y) ohne Parameter reproduzieren die neuen Regeln immer noch das alte Verhalten.
get_ticklabels füllt jetzt immer Labels auf#
Zuvor gab Axis.get_ticklabels (und Axes.get_xticklabels, Axes.get_yticklabels) nur leere Strings zurück, es sei denn, eine Zeichnung wurde bereits durchgeführt. Jetzt werden die Ticks und ihre Labels aktualisiert, wenn die Labels angefordert werden.
Warnung, wenn Farb-Einstellungen von Scatter-Plots verworfen werden#
Beim Erstellen einer Animation eines Scatter-Plots werden Farb-Einstellungen ignoriert, wenn c (der Farbwertparameter) bei der Initialisierung des Künstlers nicht gesetzt ist. Axes.scatter gibt jetzt eine Warnung aus, wenn farbbezogene Einstellungen geändert werden, ohne c zu setzen.
3D contourf-Polygone zwischen Ebenen platziert#
Die für ein 3D contourf-Plot verwendeten Polygone werden jetzt auf halbem Weg zwischen den Konturebenen platziert, da jedes Polygon den Ort von Werten darstellt, die zwischen zwei Ebenen liegen.
Achsentitel vermeidet jetzt Y-Achsen-Offset#
Zuvor konnten Achsentitel den Y-Achsen-Offset-Text überlappen, der sich oft in der oberen linken Ecke der Achsen befindet. Jetzt werden Titel über den Offset-Text verschoben, wenn sie sich überlappen und die automatische Titelpositionierung aktiv ist (d. h. wenn y in Axes.set_title None ist und rcParams["axes.titley"] (Standard: None) ebenfalls None ist).
Gepunktete Operatoren erhalten zusätzlichen Platz in Mathtext#
In Mathtext werden \doteq \doteqdot \dotminus \dotplus \dots jetzt von zusätzlichem Platz umgeben, da sie korrekt als relationale oder binäre Operatoren behandelt werden.
math-Parameter von mathtext.get_unicode_index hat standardmäßig False#
Im mathematischen Modus werden ASCII-Bindestriche (U+002D) nun im Parsing-Stadium durch Unicode-Minuszeichen (U+2212) ersetzt.
ArtistList-Proxies kopieren Inhalte bei Iteration#
Beim Iterieren über den Inhalt der dynamisch generierten Proxy-Listen für die Artist-Typ-Accessor (siehe Achsen-Kinder werden nicht mehr nach Typ getrennt) wird eine Kopie des Inhalts erstellt. Dies stellt sicher, dass Künstler sicher zu den Achsen hinzugefügt oder daraus entfernt werden können, während über ihre Kinder iteriert wird.
Dies weicht vom erwarteten Verhalten von veränderlichen iterierbaren Datentypen in Python ab — das Iterieren über eine Liste, während sie verändert wird, hat überraschende Konsequenzen, und bei Dictionaries kommt es zu Fehlern, wenn sich ihre Größe während der Iteration ändert. Da alle Accessoren gefilterte Ansichten derselben zugrunde liegenden Liste sind, ist es möglich, dass scheinbar unzusammenhängende Änderungen, wie z. B. das Entfernen einer Linie, die Iteration über andere Accessoren beeinflussen. In diesem Fall haben wir uns entschieden, eine Kopie der relevanten Kinder zu erstellen, bevor sie an den Benutzer weitergegeben werden.
Diese Änderung steht auch im Einklang mit unserem Plan, diese Accessoren in Matplotlib 3.7 unveränderlich zu machen.
String-Repräsentation von AxesImage#
Die String-Repräsentation von AxesImage ändert sich von der Angabe der Position in der Figur "AxesImage(80,52.8;496x369.6)" zur Angabe der Pixelanzahl "AxesImage(size=(300, 200))".
Verbesserte Autoskalierung für Bézier-Kurven#
Bézier-Kurven werden jetzt auf ihre Extrema autoskaliert — zuvor wurden sie auf ihre Endpunkte und Kontrollpunkte autoskaliert, was in einigen Fällen zu unnötig großen Grenzen führte.
QuadMesh-Mauszeigerstandard ist False#
Neu in 3.5 ermöglicht QuadMesh.get_cursor_data die Anzeige von Datenwerten unter dem Mauszeiger. Dies kann jedoch bei großen Meshes sehr langsam sein, daher ist Mauszeigerstandard jetzt auf False gesetzt.
Geänderte Dokumentenklasse des PGF-Backends#
Das PGF-Backend verwendet nun die Dokumentenklasse article als Grundlage für die Kompilierung.
MathtextBackendAgg.get_results gibt used_characters nicht mehr zurück#
Das letzte Element (used_characters) im Tupel, das von MathtextBackendAgg.get_results zurückgegeben wird, wurde entfernt. Um dieses Tupel rückwärts- und vorwärtskompatibel zu entpacken, verwenden Sie z. B. ox, oy, width, height, descent, image, *_ = parse(...), wodurch used_characters ignoriert wird, falls es vorhanden war.
Type1Font-Objekte enthalten mehr Eigenschaften#
Das matplotlib._type1font.Type1Font.prop-Dictionary enthält nun mehr Schlüssel, wie z. B. CharStrings und Subrs. Der Wert des Schlüssels Encoding ist nun ein Wörterbuch, das Codes auf Glyphennamen abbildet. Die Methode matplotlib._type1font.Type1Font.transform entfernt nun korrekt UniqueID-Eigenschaften aus der Schriftart.
rcParams.copy() gibt RcParams statt dict zurück#
Die Rückgabe einer RcParams-Instanz von RcParams.copy sorgt dafür, dass die Kopie weiterhin Eingaben validiert und vermeidet außerdem die Ausgabe von Deprecationswarnungen bei der Verwendung einer zuvor kopierten Instanz zur Aktualisierung der globalen Instanz (auch wenn einige Einträge veraltet sind).
rc_context setzt den Wert von 'backend' nicht mehr zurück#
matplotlib.rc_context hat den Wert von rcParams["backend"] falsch zurückgesetzt, wenn im Kontext eine Backend-Auflösung ausgelöst wurde. Dies wirkte sich nur auf den Wert aus. Das tatsächliche Backend wurde nicht geändert. Jetzt setzt matplotlib.rc_context rcParams["backend"] nicht mehr zurück.
Standard-rcParams["animation.convert_args"] geändert#
Es wird nun standardmäßig auf ["-layers", "OptimizePlus"] gesetzt, um zu versuchen, kleinere GIFs zu generieren. Setzen Sie es auf eine leere Liste zurück, um das vorherige Verhalten wiederherzustellen.
Stil-Datei-Kodierung jetzt auf UTF-8 spezifiziert#
Es war unmöglich, Matplotlib mit einer nicht UTF-8-kompatiblen Locale-Kodierung zu importieren, da wir die Stilbibliothek beim Import lesen. Diese Änderung formalisiert und dokumentiert den Status quo, sodass keine Deprecationsperiode erforderlich ist.
MacOSX-Backend verwendet sRGB anstelle von GenericRGB-Farbraum#
Das MacOSX-Backend zeigt nun sRGB-getaggte Bilder an anstelle von GenericRGB, einem älteren (nun veralteten) Apple-Farbraum. Dies ist der Quellfarbraum, den ColorSync zur Konvertierung in das aktuelle Display-Profil verwendet.
Renderer optional für get_tightbbox und get_window_extent#
Die Methoden Artist.get_tightbbox und Artist.get_window_extent erfordern kein renderer-Schlüsselwortargument mehr, wodurch Benutzer davon befreit werden, es von fig.canvas.get_renderer abfragen zu müssen. Wenn das renderer-Schlüsselwortargument nicht angegeben wird, prüfen diese Methoden zuerst, ob ein gecachter Renderer von einer früheren Zeichnung vorhanden ist, und verwenden diesen. Wenn kein gecachter Renderer vorhanden ist, verwenden die Methoden fig.canvas.get_renderer() als Fallback.
Konstruktor von FigureFrameWx, Unterklassen und get_canvas#
Der Konstruktor von FigureCanvasWx erhielt einen schlüsselwort-only Parameter canvas_class, der die zu verwendende Canvas-Klasse angibt. Dieser Parameter wird in Zukunft erforderlich sein. Die Methode get_canvas, die zuvor zur Anpassung der Canvas-Erstellung verwendet wurde, ist veraltet. Die Unterklassen FigureFrameWxAgg und FigureFrameWxCairo, die get_canvas überschrieben, sind veraltet.
FigureFrameWx.sizer#
... wurde entfernt. Das Frame-Layout basiert nicht mehr auf einem Sizer, da die Canvas das einzige Kind-Widget ist; die Symbolleiste ist nun eine reguläre Symbolleiste, die über SetToolBar hinzugefügt wird.
Inkompatible Layout-Engines lösen aus#
Sie können nicht zwischen tight_layout und constrained_layout wechseln, wenn bereits eine Farbpalette zu einer Figur hinzugefügt wurde. Das Aufrufen der inkompatiblen Layout-Engine gab früher eine Warnung aus, löst aber jetzt mit einem RuntimeError aus.
CallbackRegistry löst bei unbekannten Signalen aus#
Wenn Matplotlib eine CallbackRegistry instanziiert, beschränkt sie nun Rückruffunktionen auf die Signale, die die Registry kennt. Dies bedeutet in der Praxis, dass der Aufruf von mpl_connect mit einem ungültigen Signalnamen nun einen ValueError auslöst.
Geänderter Ausnahmetyp für fehlerhafte SVG-Datumsmetadaten#
Die Bereitstellung von Datumsmetadaten mit falschem Typ für das SVG-Backend führte früher zu einem ValueError. Jetzt wird stattdessen ein TypeError ausgelöst.
Spezifizierte Ausnahmetypen in Grid#
In einigen Fällen wurde eine Exception ausgelöst, wenn ein falscher Argumentwert im Konstruktor von mpl_toolkits.axes_grid1.axes_grid.Grid (= mpl_toolkits.axisartist.axes_grid.Grid) gesetzt wurde. Diese werden wie folgt ersetzt:
Die Angabe eines falschen Wertes für ngrids löst nun einen
ValueErrorausDie Angabe eines falschen Typs für rect löst nun einen
TypeErroraus
Veralterungen#
Parameter für plt.figure() und den Figure-Konstruktor#
Alle Parameter für pyplot.figure und den Figure-Konstruktor, mit Ausnahme von num, figsize und dpi, werden nach einer Deprecationsperiode zu schlüsselwort-only.
Deprecations-Aliase in cbook#
Das Modul matplotlib.cbook.deprecation wurde bereits in Matplotlib 3.4 veraltet, zusammen mit Deprecations-bezogener API in matplotlib.cbook. Aufgrund technischer Probleme lösten matplotlib.cbook.MatplotlibDeprecationWarning und matplotlib.cbook.mplDeprecation bei der Verwendung keine Deprecationswarnungen aus. Änderungen in Python haben es nun ermöglicht, bei der Verwendung dieser Aliase zu warnen.
Um nachgelagerte Fehler zu vermeiden, warnen diese Aliase nun, und ihre Entfernung wurde von 3.6 auf 3.8 verschoben, um Zeit für die Beachtung dieser Warnungen zu geben. Als Ersatz verwenden Sie bitte matplotlib.MatplotlibDeprecationWarning.
Axes-Unterklassen sollten clear anstelle von cla überschreiben#
Zur Klarheit wird nun axes.Axes.clear gegenüber Axes.cla bevorzugt. Aus Gründen der Abwärtskompatibilität bleibt letzteres jedoch ein Alias für ersteres.
Für zusätzliche Kompatibilität mit Drittanbieterbibliotheken ruft Matplotlib weiterhin die cla-Methode von Axes-Unterklassen auf, falls diese definiert sind. In Zukunft wird dies nicht mehr der Fall sein, und Matplotlib wird nur die clear-Methode in Axes-Unterklassen aufrufen.
Es wird empfohlen, nur die clear-Methode für Matplotlib 3.6 zu definieren und nur cla für ältere Versionen.
Anstehende Deprecation von Top-Level-Registrierungs- und Zugriffsfunktionen für Cmaps in mpl.cm#
Als Teil eines mehrstufigen Prozesses refaktorisieren wir den globalen Zustand für die Verwaltung der registrierten Colormaps.
In Matplotlib 3.5 haben wir eine Klasse ColormapRegistry hinzugefügt und eine Instanz auf Top-Level als matplotlib.colormaps bereitgestellt. Die vorhandenen Top-Level-Funktionen in matplotlib.cm (get_cmap, register_cmap, unregister_cmap) wurden so geändert, dass sie Aliase für dieselbe Instanz sind.
In Matplotlib 3.6 haben wir diese Top-Level-Funktionen als "pending deprecation" markiert, mit der Absicht, sie in Matplotlib 3.7 zu veraltet zu erklären. Die folgenden Funktionen wurden zur Deprecation markiert:
matplotlib.cm.get_cmap; verwenden Sie stattdessenmatplotlib.colormaps[name], wenn Sie einenstrhaben.Hinzugefügt 3.6.1 Verwenden Sie
matplotlib.cm.ColormapRegistry.get_cmap, wenn Sie einen String,Noneoder einmatplotlib.colors.Colormap-Objekt haben, das Sie in einematplotlib.colors.Colormap-Instanz konvertieren möchten.matplotlib.cm.register_cmap; verwenden Sie stattdessenmatplotlib.colormaps.registermatplotlib.cm.unregister_cmap; verwenden Sie stattdessenmatplotlib.colormaps.unregistermatplotlib.pyplot.register_cmap; verwenden Sie stattdessenmatplotlib.colormaps.register
Die Funktion matplotlib.pyplot.get_cmap bleibt aus Kompatibilitätsgründen erhalten.
Anstehende Deprecation von Layout-Methoden#
Die Methoden set_tight_layout, set_constrained_layout werden nicht mehr empfohlen und geben nun eine PendingDeprecationWarning aus, zugunsten der expliziten Referenzierung der Layout-Engine über figure.set_layout_engine('tight') und figure.set_layout_engine('constrained'). Endbenutzer sollten die Warnung nicht sehen, aber Bibliotheksentwickler sollten sich anpassen.
Die Methoden set_constrained_layout_pads und get_constrained_layout_pads werden zugunsten von figure.get_layout_engine().set() und figure.get_layout_engine().get() veraltet sein und geben derzeit eine PendingDeprecationWarning aus.
Seaborn-Stile umbenannt#
Matplotlib liefert derzeit viele Stil-Dateien, die von der Seaborn-Bibliothek inspiriert sind ("seaborn", "seaborn-bright", "seaborn-colorblind" usw.), aber sie sind seit der Veröffentlichung von Seaborn 0.9 nicht mehr mit der Bibliothek selbst synchron. Um Verwirrung zu vermeiden, wurden die Stil-Dateien in "seaborn-v0_8", "seaborn-v0_8-bright", "seaborn-v0_8-colorblind" usw. umbenannt. Benutzer werden ermutigt, Seaborn direkt zu verwenden, um auf die aktuellen Stile zuzugreifen.
Automatische Entfernung überlappender Achsen durch plt.subplot und plt.subplot2grid#
Zuvor entfernten pyplot.subplot und pyplot.subplot2grid automatisch vor vorhandene Achsen, die mit den neu hinzugefügten Achsen überlappen. Dieses Verhalten wurde als verwirrend eingestuft und ist nun veraltet. Rufen Sie explizit ax.remove() für Achsen auf, die entfernt werden müssen.
Positional übergabe von linefmt an stem ist nicht mehr veraltet#
Die positionale Verwendung aller Formatierungsparameter in stem ist seit Matplotlib 3.5 veraltet. Diese Deprecation wird gelockert, sodass man linefmt weiterhin positional übergeben kann, d. h. stem(x, y, 'r').
stem(..., use_line_collection=False)#
... ist veraltet ohne Ersatz. Dies war ein Kompatibilitäts-Fallback für eine frühere, ineffizientere Darstellung der Stem-Linien.
Positions- / Schlüsselwortargumente#
Die positionale Übergabe aller bis auf die allerersten Argumente in den Konstruktoren von Artists ist veraltet. Die meisten Argumente werden in einer zukünftigen Version zu schlüsselwort-only.
Die Übergabe zu vieler Positionsargumente an tripcolor ist nun veraltet (zusätzliche Argumente wurden zuvor stillschweigend ignoriert).
Die positionale Übergabe der Parameter emit und auto von set_xlim, set_ylim, set_zlim, set_rlim ist veraltet; sie werden in einer zukünftigen Version zu schlüsselwort-only.
Der Parameter transOffset von Collection.set_offset_transform und die verschiedenen create_collection-Methoden von Legend-Handlern wurden in offset_transform umbenannt (konsistent mit dem Eigenschaftsnamen).
Der Aufruf von MarkerStyle() ohne Argumente oder mit MarkerStyle(None) ist veraltet; verwenden Sie MarkerStyle(""), um einen leeren Marker-Stil zu erstellen.
Axes.get_window_extent / Figure.get_window_extent akzeptieren nur renderer. Dies gleicht die API mit der allgemeinen Artist.get_window_extent-API an. Alle anderen Parameter wurden sowieso ignoriert.
Der Parameter cleared von get_renderer, der nur für AGG-basierte Backends existierte, ist veraltet. Verwenden Sie stattdessen renderer.clear(), um den Renderer-Puffer explizit zu löschen.
Methoden zum Setzen von Parametern in LogLocator und LogFormatter*#
In LogFormatter und abgeleiteten Unterklassen sind die Methoden base und label_minor zum Setzen des jeweiligen Parameters veraltet und werden durch set_base und set_label_minor ersetzt.
In LogLocator, die Methoden base und subs zum Setzen der jeweiligen Parameter sind veraltet. Verwenden Sie stattdessen set_params(base=..., subs=...).
Axes.get_renderer_cache#
Die Canvas kümmert sich nun um den Renderer und ob dieser zwischengespeichert werden soll oder nicht. Die Alternative ist der Aufruf von axes.figure.canvas.get_renderer().
Nicht verwendete Methoden in Axis, Tick, XAxis und YAxis#
Tick.label ist seit Version 3.1 veraltet und nun veraltet. Verwenden Sie stattdessen Tick.label1.
Die folgenden Methoden werden nicht mehr verwendet und sind ohne Ersatz veraltet
Axis.get_ticklabel_extentsTick.get_pad_pixelsXAxis.get_text_heightsYAxis.get_text_widths
mlab.stride_windows#
... ist veraltet. Verwenden Sie stattdessen np.lib.stride_tricks.sliding_window_view (oder np.lib.stride_tricks.as_strided auf NumPy < 1.20).
Ereignisbehandler#
Die Methoden draw_event, resize_event, close_event, key_press_event, key_release_event, pick_event, scroll_event, button_press_event, button_release_event, motion_notify_event, enter_notify_event und leave_notify_event von FigureCanvasBase sind veraltet. Sie hatten inkonsistente Signaturen über Backends hinweg und erschwerten die Verbesserung von Ereignismetadaten.
Um ein Ereignis auf einer Canvas auszulösen, erstellen Sie direkt ein Event-Objekt der richtigen Klasse und rufen Sie canvas.callbacks.process(event.name, event) auf.
Widgets#
Alle Parameter für MultiCursor ab useblit werden zu nur-Schlüsselwort-Argumenten (positionales Übergeben ist veraltet).
Die Attribute canvas und background von MultiCursor sind ohne Ersatz veraltet.
Das Attribut visible von Selector-Widgets ist veraltet; verwenden Sie stattdessen set_visible oder get_visible.
Das Attribut state_modifier_keys von Selector-Widgets wurde privatisiert und die Modifikatortasten müssen beim Erstellen des Widgets gesetzt werden.
Axes3D.dist#
... wurde privatisiert. Verwenden Sie stattdessen das Schlüsselwortargument zoom in Axes3D.set_box_aspect.
3D-Achse#
Der vorherige Konstruktor von axis3d.Axis mit der Signatur (self, adir, v_intervalx, d_intervalx, axes, *args, rotate_label=None, **kwargs) ist zugunsten einer neuen Signatur, die der von 2D-Achsen näher kommt, veraltet; sie lautet nun (self, axes, *, rotate_label=None, **kwargs), wobei kwargs an den Konstruktor der 2D-Achsen weitergeleitet werden. Die Achsenrichtung wird nun aus dem Attribut axis_name der Achsenklasse abgeleitet (wie im 2D-Fall); das Attribut adir ist veraltet.
Die Methode init3d der 3D-Achse ist ebenfalls veraltet; die gesamte relevante Initialisierung erfolgt im Konstruktor.
Die Attribute d_interval und v_interval der 3D-Achse sind veraltet; verwenden Sie stattdessen get_data_interval und get_view_interval.
Die Attribute w_xaxis, w_yaxis und w_zaxis von Axis3D sind seit Version 3.1 veraltet. Sie sind nun veraltet. Verwenden Sie stattdessen xaxis, yaxis und zaxis.
mplot3d.axis3d.Axis.set_pane_pos ist veraltet. Dies ist eine interne Methode, bei der die übergebenen Werte während des Zeichnens überschrieben werden. Daher ist sie für den direkten Zugriff nicht sinnvoll.
Die beiden Hilfsfunktionen mplot3d.axis3d.move_from_center und mplot3d.axis3d.tick_update_position gelten als intern und sind veraltet. Wenn diese benötigt werden, sollten Sie den Code aus den entsprechenden privaten Methoden _move_from_center und _tick_update_position übernehmen.
Figure.callbacks ist veraltet#
Die Eigenschaft callbacks der Figure ist veraltet. Das einzige Signal war "dpi_changed", das durch Verbindung mit "resize_event" auf der Canvas figure.canvas.mpl_connect("resize_event", func) ersetzt werden kann.
FigureCanvas ohne Attribut required_interactive_framework#
Die Unterstützung für solche Canvas-Klassen ist veraltet. Beachten Sie, dass Canvas-Klassen, die von FigureCanvasBase erben, immer ein solches Attribut besitzen.
Backend-spezifische Veralterungen#
backend_gtk3.FigureManagerGTK3Aggundbackend_gtk4.FigureManagerGTK4Agg; verwenden Sie stattdessen direktbackend_gtk3.FigureManagerGTK3undbackend_gtk4.FigureManagerGTK4.Der Parameter window für
backend_gtk3.NavigationToolbar2GTK3hatte keine Auswirkung und ist nun veraltet.backend_gtk3.NavigationToolbar2GTK3.winbackend_gtk3.RendererGTK3Cairoundbackend_gtk4.RendererGTK4Cairo; verwenden Sie stattdessenRendererCairo, das die Methodeset_contexterhalten hat, welche auch die Größe der zugrundeliegenden Oberfläche automatisch ableitet.backend_cairo.RendererCairo.set_ctx_from_surfaceundbackend_cairo.RendererCairo.set_width_heightzugunsten vonRendererCairo.set_context.backend_gtk3.error_msg_gtkbackend_gtk3.icon_filenameundbackend_gtk3.window_iconbackend_macosx.NavigationToolbar2Mac.prepare_configure_subplotswurde durchconfigure_subplots()ersetzt.backend_pdf.Name.hexifybackend_pdf.Operatorundbackend_pdf.Op.opsind zugunsten einer einzelnen standardmäßigenenum.Enum-Schnittstelle aufbackend_pdf.Opveraltet.backend_pdf.fill; übernehmen Sie den Code der gleichnamigen privaten Funktionen, wenn Sie sich auf diese Funktionen verlassen.backend_pgf.LatexManager.texcommandundbackend_pgf.LatexManager.latex_headerbackend_pgf.NO_ESCAPEbackend_pgf.common_texificationbackend_pgf.get_fontspecbackend_pgf.get_preamblebackend_pgf.re_mathsepbackend_pgf.writelnbackend_ps.convert_psfragsbackend_ps.quote_ps_string; übernehmen Sie den Code der gleichnamigen privaten Funktionen, wenn Sie sich darauf verlassen.backend_qt.qApp; verwenden Sie stattdessenQtWidgets.QApplication.instance().backend_svg.escape_attrib; übernehmen Sie den Code der gleichnamigen privaten Funktionen, wenn Sie sich darauf verlassen.backend_svg.escape_cdata; übernehmen Sie den Code der gleichnamigen privaten Funktionen, wenn Sie sich darauf verlassen.backend_svg.escape_comment; übernehmen Sie den Code der gleichnamigen privaten Funktionen, wenn Sie sich darauf verlassen.backend_svg.short_float_fmt; übernehmen Sie den Code der gleichnamigen privaten Funktionen, wenn Sie sich darauf verlassen.backend_svg.generate_transformundbackend_svg.generate_cssbackend_tk.NavigationToolbar2Tk.lastrectundbackend_tk.RubberbandTk.lastrectbackend_tk.NavigationToolbar2Tk.window; verwenden Sie stattdessentoolbar.master.backend_tools.ToolBase.destroy; Um Code beim Entfernen eines Tools auszuführen, verbinden Sie sich mit dem Ereignistool_removed_event.backend_wx.RendererWx.offset_text_heightbackend_wx.error_msg_wxFigureCanvasBase.pick; rufen Sie direktFigure.pickauf, das nun die Verantwortung für die Überprüfung des Canvas-Widget-Locks übernommen hat.FigureCanvasBase.resize, die keine Auswirkung hat; verwenden Sie stattdessenFigureManagerBase.resize.FigureManagerMac.closeFigureFrameWx.sizer; verwenden Sie stattdessenframe.GetSizer().FigureFrameWx.figmgrundFigureFrameWx.get_figure_manager; verwenden Sie stattdessenframe.canvas.manager.FigureFrameWx.num; verwenden Sie stattdessenframe.canvas.manager.num.FigureFrameWx.toolbar; verwenden Sie stattdessenframe.GetToolBar().FigureFrameWx.toolmanager; verwenden Sie stattdessenframe.canvas.manager.toolmanager.
Module#
Die Module matplotlib.afm, matplotlib.docstring, matplotlib.fontconfig_pattern, matplotlib.tight_bbox, matplotlib.tight_layout und matplotlib.type1font gelten als intern und der öffentliche Zugriff ist veraltet.
checkdep_usetex veraltet#
Diese Methode war nur dazu gedacht, Tests zu deaktivieren, falls keine LaTeX-Installation gefunden wurde. Daher gilt sie als privat und nur für den internen Gebrauch.
Bitte übernehmen Sie den Code, falls Sie diesen benötigen.
date_ticker_factory veraltet#
Die Methode date_ticker_factory im Modul matplotlib.dates ist veraltet. Verwenden Sie stattdessen AutoDateLocator und AutoDateFormatter für einen flexibleren und skalierbareren Locator und Formatter.
Wenn Sie das exakte Verhalten von date_ticker_factory benötigen, kopieren Sie bitte den Code.
dviread.find_tex_file wird FileNotFoundError auslösen#
In Zukunft wird dviread.find_tex_file eine FileNotFoundError für fehlende Dateien auslösen. Zuvor gab sie in solchen Fällen einen leeren String zurück. Das Auslösen einer Ausnahme ermöglicht das Anhängen einer benutzerfreundlichen Nachricht. Während der Übergangszeit wird eine Warnung ausgegeben.
transforms.Affine2D.identity()#
... ist zugunsten des direkten Aufrufs des Affine2D-Konstruktors ohne Argumente veraltet.
Veralterungen in testing.decorators#
Die ungenutzte Klasse CleanupTestCase und der Dekorator cleanup sind veraltet und werden entfernt. Übernehmen Sie den Code, einschließlich der privaten Funktion _cleanup_cm.
Die Funktion check_freetype_version gilt als intern und ist veraltet. Übernehmen Sie den Code der privaten Funktion _check_freetype_version.
text.get_rotation()#
... ist ohne Ersatz veraltet. Kopieren Sie bei Bedarf die ursprüngliche Implementierung.
Verschiedene interne Elemente#
axes_grid1.axes_size.AddList; verwenden Sie stattdessensum(sizes, start=Fixed(0))(zum Beispiel), um mehrere Grössenobjekte zu summieren.axes_size.Padded; verwenden Sie stattdessensize + padaxes_size.SizeFromFunc,axes_size.GetExtentHelperAxisArtistHelper.delta1undAxisArtistHelper.delta2axislines.GridHelperBase.new_gridlinesundaxislines.Axes.new_gridlinescbook.maxdict; verwenden Sie stattdessen den Standardbibliotheks-Cachefunctools.lru_cache._DummyAxis.dataLimund_DummyAxis.viewLim; verwenden Sie stattdessenget_data_interval(),set_data_interval(),get_view_interval()undset_view_interval().GridSpecBase.get_grid_positions(..., raw=True)ImageMagickBase.delayundImageMagickBase.output_argsMathtextBackend,MathtextBackendAgg,MathtextBackendPath,MathTextWarningTexManager.get_font_config; es gab zuvor einen internen Hash-Schlüssel zurück, der für Caching-Zwecke verwendet wurde.TextToPath.get_texmanager; erstellen Sie stattdessen direkt einentexmanager.TexManager.ticker.is_close_to_int; verwenden Sie stattdessenmath.isclose(x, round(x)).ticker.is_decade; verwenden Sie stattdesseny = numpy.log(x)/numpy.log(base); numpy.isclose(y, numpy.round(y)).
Entfernungen#
Die folgenden veralteten APIs wurden entfernt
Entferntes Verhalten#
Strengere Validierung von Funktionsparametern#
Unbekannte Schlüsselwortargumente für
Figure.savefig,pyplot.savefigund dieFigureCanvas.print_*Methoden lösen nun einenTypeErroraus, anstatt ignoriert zu werden.Zusätzliche Parameter für den Konstruktor von
Axes, d. h. solche außer fig und rect, sind nun nur noch Schlüsselwortargumente.Das Übergeben von Argumenten, die nicht explizit in den Signaturen von
Axes3D.plot_surfaceundAxes3D.plot_wireframeaufgeführt sind, wird nicht mehr unterstützt; übergeben Sie stattdessen zusätzliche Argumente als Schlüsselwortargumente.Das Übergeben von positionsgebundenen Argumenten an
LineCollectionwurde entfernt; verwenden Sie nun spezifische Schlüsselwortargumentnamen.
imread akzeptiert keine URLs mehr#
Das Übergeben einer URL an imread() wurde entfernt. Bitte öffnen Sie die URL zum Lesen und verwenden Sie direkt die Pillow API (z. B. PIL.Image.open(urllib.request.urlopen(url)) oder PIL.Image.open(io.BytesIO(requests.get(url).content))) stattdessen.
MarkerStyle ist unveränderlich#
Die Methoden MarkerStyle.set_fillstyle und MarkerStyle.set_marker wurden entfernt. Erstellen Sie stattdessen einen neuen MarkerStyle mit den entsprechenden Parametern.
Das Übergeben von Bytes an FT2Font.set_text#
... wird nicht mehr unterstützt. Übergeben Sie stattdessen str.
Unterstützung für die Übergabe von Tool-Namen an ToolManager.add_tool#
... wurde entfernt. Der zweite Parameter von ToolManager.add_tool muss nun immer eine Tool-Klasse sein.
backend_tools.ToolFullScreen erbt nun von ToolBase, nicht von ToolToggleBase#
ToolFullScreen kann nur zwischen dem Nicht-Vollbild- und dem Vollbildmodus umschalten, aber das Fenster nicht bedingungslos in einen bestimmten Zustand versetzen; daher waren die Methoden enable und disable irreführend benannt. Somit wurde die ToolToggleBase-bezogene API (enable, disable usw.) entfernt.
BoxStyle._Base und die Methode transmute von Box-Stilen#
... wurden entfernt. Als Klassen implementierte Box-Stile müssen nicht mehr von einer Basisklasse erben.
Protokollierung geladener Module#
Die Liste der aktuell geladenen Module wird beim Import von Matplotlib nicht mehr auf DEBUG-Ebene protokolliert, da dies zu umfangreichen Ausgaben führen und andere wertvolle DEBUG-Meldungen schwer auffindbar machen kann. Wenn Sie sich auf diese Ausgabe verlassen haben, richten Sie bitte Ihre eigene Protokollierung ein (das eingebaute sys.modules kann verwendet werden, um die aktuell geladenen Module zu erhalten).
Module#
Das Modul
cbook.deprecationwurde aus der öffentlichen API entfernt, da es als intern betrachtet wird.Das Modul
mpl_toolkits.axes_gridwurde entfernt. Die gesamte Funktionalität vonmpl_toolkits.axes_gridfinden Sie entweder inmpl_toolkits.axes_grid1oder inmpl_toolkits.axisartist. Achsenklassen ausmpl_toolkits.axes_grid, die aufAxisausmpl_toolkits.axisartistbasieren, finden Sie inmpl_toolkits.axisartist.
Klassen, Methoden und Attribute#
Die folgenden Klassen/Variablen auf Modulebene wurden entfernt
cm.cmap_dcolorbar.colorbar_doc,colorbar.colorbar_kw_docColorbarPatchmathtext.Fontsund alle seine Unterklassenmathtext.FontConstantsBaseund alle seine Unterklassenmathtext.latex_to_bakoma,mathtext.latex_to_cmex,mathtext.latex_to_standardmathtext.MathtextBackendPdf,mathtext.MathtextBackendPs,mathtext.MathtextBackendSvg,mathtext.MathtextBackendCairo; verwenden Sie stattdessen.MathtextBackendPath.mathtext.Nodeund alle seine Unterklassenmathtext.NUM_SIZE_LEVELSmathtext.Parsermathtext.Shipmathtext.SHRINK_FACTORundmathtext.GROW_FACTORmathtext.stix_virtual_fonts,mathtext.tex2unibackend_pgf.TmpDirCleanerbackend_ps.GraphicsContextPS; verwenden Sie stattdessenGraphicsContextBase.backend_wx.IDLE_DELAYaxes_grid1.parasite_axes.ParasiteAxesAuxTransBase; verwenden Sie stattdessenParasiteAxesBase.axes_grid1.parasite_axes.ParasiteAxesAuxTrans; verwenden Sie stattdessenParasiteAxes.
Die folgenden Klassenattribute wurden entfernt
Line2D.validCapundLine2D.validJoin; die Validierung ist inrcsetupzentralisiert.Patch.validCapundPatch.validJoin; die Validierung ist inrcsetupzentralisiert.renderer.M,renderer.eye,renderer.vvec,renderer.get_axis_position, die während des 3D-Achsen-Zeichnens im Renderer platziert wurden; diese Attribute sind alle überAxes3Dverfügbar, auf das überself.axesbei allenArtists zugegriffen werden kann.RendererPdf.mathtext_parser,RendererPS.mathtext_parser,RendererSVG.mathtext_parser,RendererCairo.mathtext_parserStandardPsFonts.pswriterSubplot.figbox; verwenden Sie stattdessenAxes.get_position.Subplot.numRows; stattdessenax.get_gridspec().nrows.Subplot.numCols; stattdessenax.get_gridspec().ncols.SubplotDivider.figboxcids,cnt,observers,change_observersundsubmit_observersbei allenWidgets
Die folgenden Klassenmethoden wurden entfernt
Axis.cla(); verwenden Sie stattdessenAxis.clear.RadialAxis.cla()undThetaAxis.cla(); verwenden Sie stattdessenRadialAxis.clearoderThetaAxis.clear.Spine.cla(); verwenden Sie stattdessenSpine.clear.ContourLabeler.get_label_coords(); es gibt keinen Ersatz, da es als interne Hilfsfunktion galt.FancyArrowPatch.get_dpi_corundFancyArrowPatch.set_dpi_corFigureCanvas.get_window_title()undFigureCanvas.set_window_title(); verwenden SieFigureManagerBase.get_window_titleoderFigureManagerBase.set_window_title, wenn Sie pyplot verwenden, oder verwenden Sie GUI-spezifische Methoden, wenn Sie einbetten.FigureManager.key_press()undFigureManager.button_press(); lösen Sie die Ereignisse direkt auf der Leinwand aus, indem Siecanvas.callbacks.process(event.name, event)für Tastatur- und Maustastenereignisse verwenden.RendererAgg.get_content_extents()undRendererAgg.tostring_rgba_minimized()NavigationToolbar2Wx.get_canvas()ParasiteAxesBase.update_viewlim(); verwenden Sie stattdessenParasiteAxesBase.apply_aspect.Subplot.get_geometry(); verwenden Sie stattdessenSubplotBase.get_subplotspec.Subplot.change_geometry(); verwenden Sie stattdessenSubplotBase.set_subplotspec.Subplot.update_params(); diese Methode tat nichts.Subplot.is_first_row(); verwenden Sie stattdessenax.get_subplotspec().is_first_row.Subplot.is_first_col(); verwenden Sie stattdessenax.get_subplotspec().is_first_col.Subplot.is_last_row(); verwenden Sie stattdessenax.get_subplotspec().is_last_row.Subplot.is_last_col(); verwenden Sie stattdessenax.get_subplotspec().is_last_col.SubplotDivider.change_geometry(); verwenden Sie stattdessenSubplotDivider.set_subplotspec.SubplotDivider.get_geometry(); verwenden Sie stattdessenSubplotDivider.get_subplotspec.SubplotDivider.update_params()get_depth,parse,to_mask,to_rgbaundto_pngvonMathTextParser; verwenden Sie stattdessenmathtext.math_to_image.MovieWriter.cleanup(); die Cleanup-Logik ist stattdessen vollständig inMovieWriter.finishimplementiert undcleanupwird nicht mehr aufgerufen.
Funktionen#
Die folgenden Funktionen wurden entfernt;
backend_template.new_figure_manager(),backend_template.new_figure_manager_given_figure()undbackend_template.draw_if_interactive()wurden im Rahmen der Einführung der vereinfachten Backend-API entfernt.Deprecation-bezogene Re-Imports
cbook.deprecated()undcbook.warn_deprecated().colorbar.colorbar_factory(); verwenden Sie stattdessenColorbar.colorbar.make_axes_kw_doc()mathtext.Error()mathtext.ship()mathtext.tex2uni()axes_grid1.parasite_axes.parasite_axes_auxtrans_class_factory(); verwenden Sie stattdessenparasite_axes_class_factory.sphinext.plot_directive.align(); verwenden Sie stattdessendocutils.parsers.rst.directives.images.Image.align.
Argumente#
Die folgenden Argumente wurden entfernt
dpi von
print_ps()im PS-Backend undprint_pdf()im PDF-Backend. Stattdessen erhalten die Methoden die DPI aus dersavefig-Maschinerie.dpi_cor von
FancyArrowPatchminimum_descent von
TextArea; es ist jetzt effektiv immer Trueorigin von
FigureCanvasWx.gui_repaint()project von
Line3DCollection.draw()renderer von
Line3DCollection.do_3d_projection,Patch3D.do_3d_projection,PathPatch3D.do_3d_projection,Path3DCollection.do_3d_projection,Patch3DCollection.do_3d_projection,Poly3DCollection.do_3d_projectionresize_callback aus dem Tk-Backend; verwenden Sie stattdessen
get_tk_widget().bind('<Configure>', ..., True).return_all von
gridspec.get_position()Schlüsselwortargumente an
gca(); es gibt keinen Ersatz.
rcParams#
Die Einstellung rcParams["ps.useafm"] (Standard: False) hat keine Auswirkung mehr auf matplotlib.mathtext.
Entwicklungsänderungen#
Erhöhung der minimal unterstützten Versionen von Abhängigkeiten.
Für Matplotlib 3.6 werden die minimal unterstützten Versionen angehoben
Abhängigkeit |
min in mpl3.5 |
min in mpl3.6 |
|---|---|---|
Python |
3.7 |
3.8 |
NumPy |
1.17 |
1.19 |
Dies stimmt mit unserer Richtlinie für minimale Abhängigkeiten und NEP29 überein
Änderungen der Build-Setup-Optionen#
Die Setup-Option gui_support.macosx wurde in packages.macosx umbenannt.
Neue Wheel-Architekturen#
Wheels wurden hinzugefügt für
Python 3.11
PyPy 3.8 und 3.9
Erhöhung der erforderlichen Versionen von Dokumentationsabhängigkeiten#
sphinx >= 3.0 und numpydoc >= 1.0 sind jetzt für den Aufbau der Dokumentation erforderlich.