API-Änderungen für 3.4.0#

Verhaltensänderungen#

Neufassung von Constrained Layout#

Der Layout-Manager constrained_layout wurde mit anderen äußeren Einschränkungen neu geschrieben, die bei komplizierten Subplot-Layouts robuster sein sollten. Benutzerseitige Änderungen sind:

  • Einige schlecht eingeschränkte Layouts haben jetzt andere Breiten-/Höhenplots als zuvor.

  • Farbstreifen berücksichtigen nun das Schlüsselwortargument anchor von matplotlib.colorbar.make_axes.

  • Farbstreifen sind breiter.

  • Farbstreifen in verschiedenen Zeilen oder Spalten sind robuster ausgerichtet.

  • Die Optionen hspace und wspace für Figure.set_constrained_layout_pads waren doppelt so breit, wie die Dokumentation besagt. Daher folgen sie nun der Dokumentation.

Dieses Feature bleibt "experimentell", bis die neuen Änderungen von den Benutzern ausreichend genutzt wurden, was wir für Version 3.5 oder 3.6 erwarten. Andererseits ist constrained_layout umfassend getestet und in Beispielen der Bibliothek verwendet, daher sollte die Verwendung sicher sein, aber die Layouts können sich noch ändern, da weitere Entwicklungen stattfinden.

Details zur Verwendung von constrained_layout und seinem Algorithmus finden Sie im Leitfaden für Constrained Layout.

plt.subplot Neu-Auswahl ohne Schlüsselwortargumente#

Der Zweck von pyplot.subplot ist es, die Erstellung und Neuauswahl von Achsen (Axes) in einer Figur zu erleichtern, wenn man ausschließlich die implizite Pyplot-API verwendet. Bei der Erstellung neuer Achsen ist es möglich, die Projektion (z. B. Polar-, 3D- oder verschiedene kartografische Projektionen) auszuwählen sowie zusätzliche Schlüsselwortargumente an die erstellte Achsen-Unterklasse weiterzuleiten.

Wenn pyplot.subplot zum ersten Mal für eine bestimmte Position im Achsen-Raster aufgerufen wird, erstellt und gibt es immer neue Achsen mit den übergebenen Argumenten und der Projektion (standardmäßig rechtwinklig) zurück. Bei nachfolgenden Aufrufen von pyplot.subplot müssen wir feststellen, ob eine vorhandene Achse a) äquivalente Parameter hat, in diesem Fall sollte sie als aktuelle Achse ausgewählt und zurückgegeben werden, oder b) unterschiedliche Parameter hat, in diesem Fall wird eine neue Achse erstellt und die vorhandene Achse entfernt. Dies wirft die Frage auf, was "äquivalente Parameter" sind.

Zuvor galt, dass eine vorhandene Achsen-Unterklasse, außer Axes3D, als äquivalent zu einer 2D-rechtwinkligen Achse betrachtet wurde, obwohl sie unterschiedliche Projektionen hatte, wenn die Schlüsselwortargumente (außer projection) übereinstimmten. Somit

ax1 = plt.subplot(1, 1, 1, projection='polar')
ax2 =  plt.subplots(1, 1, 1)
ax1 is ax2

Wir greifen dieses langjährige Verhalten auf, um sicherzustellen, dass in dem Fall, wenn keine Schlüsselwortargumente (irgendeiner Art) an pyplot.subplot übergeben werden, jede vorhandene Achse zurückgegeben wird, ohne Berücksichtigung der Schlüsselwörter oder der Projektion, mit der sie ursprünglich erstellt wurde. Dies führt zu einer Verhaltensänderung, wenn zusätzliche Schlüsselwörter an die ursprüngliche Achse übergeben wurden.

ax1 = plt.subplot(111, projection='polar', theta_offset=.75)
ax2 = plt.subplots(1, 1, 1)
ax1 is ax2         # new behavior
# ax1 is not ax2   # old behavior, made a new axes

ax1 = plt.subplot(111, label='test')
ax2 = plt.subplots(1, 1, 1)
ax1 is ax2         # new behavior
# ax1 is not ax2   # old behavior, made a new axes

Aus demselben Grund würde die Übergabe von projection='rectilinear' eine vorhandene Achse wiederverwenden, wenn es eine vorhandene Achse gab, die nicht rechtwinklig war.

ax1 = plt.subplot(projection='polar')
ax2 = plt.subplot(projection='rectilinear')
ax1 is not ax2     # new behavior, makes new Axes
# ax1 is ax2       # old behavior

entgegen der Benutzeranfrage.

Zuvor konnte Axes3D aufgrund eines irrelevanten Fehlers (ebenfalls in Matplotlib 3.4 behoben) nicht mit pyplot.subplot neu ausgewählt werden. Während Axes3D nun mit allen anderen Projektionen konsistent ist, gibt es eine Verhaltensänderung für

plt.subplot(projection='3d')  # create a 3D Axes

plt.subplot()                 # now returns existing 3D Axes, but
                              # previously created new 2D Axes

plt.subplot(projection='rectilinear')  # to get a new 2D Axes

ioff und ion können als Kontextmanager verwendet werden#

pyplot.ion und pyplot.ioff können nun als Kontextmanager verwendet werden, um einen Kontext mit aktiviertem oder deaktiviertem interaktivem Modus zu erstellen. Das alte Verhalten beim Aufruf dieser Funktionen bleibt erhalten. Um die neue Funktionalität zu nutzen, rufen Sie wie folgt auf:

with plt.ioff():
   # non-interactive code

Locator und Formatter müssen in der Klassenhierarchie sein#

Achsen-Locator und -Formatter müssen nun Unterklassen von Locator bzw. Formatter sein.

Datums-Locator für den täglichen Intervall gibt nun die Mitte des Monats zurück#

Der matplotlib.dates.AutoDateLocator hat standardmäßig interval_multiples=True, was versucht, Ticks an den Anfang sinnvoller Intervalle wie Monats- oder Tagesanfang usw. auszurichten. Dies führte dazu, dass ungefähr 140-tägige Intervalle dem ersten und 22. des Monats zugeordnet wurden. Dies wurde nun geändert, sodass der erste und 15. des Monats gewählt werden, was wahrscheinlich das ist, was die meisten Leute wollen.

Die Option useLocale von ScalarFormatter berücksichtigt die Gruppierung#

Wenn die Option useLocale des ScalarFormatter aktiviert ist (oder rcParams["axes.formatter.use_locale"] (Standard: False) True ist) und das konfigurierte Gebietsschema die Gruppierung verwendet, wird ein Trennzeichen hinzugefügt, wie in locale.format_string beschrieben.

Axes.errorbar zyklisiert nicht-farbige Eigenschaften korrekt#

Zuvor übersprang Axes.errorbar fälschlicherweise den Achsen-Eigenschaftszyklus, wenn eine Farbe explizit angegeben wurde, auch wenn der Eigenschaftszyklierer für andere Eigenschaften (wie den Linienstil) bestimmt war. Nun wird Axes.errorbar den Achsen-Eigenschaftszyklus wie bei Axes.plot vorrücken, d. h. solange nicht alle Eigenschaften im Zyklierer explizit übergeben werden.

pyplot.specgram verwendet immer origin='upper'#

Zuvor, wenn rcParams["image.origin"] (Standard: 'upper') auf etwas anderes als 'upper' gesetzt wurde oder wenn das Schlüsselwortargument origin mit einem anderen Wert als 'upper' übergeben wurde, wurde das Spektrogramm selbst umgedreht, aber die Achsen blieben für einen Ursprungswert von 'upper' ausgerichtet, so dass der resultierende Plot falsch beschriftet war.

Nun wird das Schlüsselwortargument origin nicht mehr unterstützt und der rcParam image.origin ignoriert. Die Funktion matplotlib.pyplot.specgram ist gezwungen, origin='upper' zu verwenden, damit die Achsen für das geplottete Spektrogramm korrekt sind.

xunits=None und yunits=None als Schlüsselwortargumente übergeben werden als "keine Aktion" behandelt#

Viele (aber nicht alle) der Methoden von Axes nehmen die (nicht dokumentierten) Schlüsselwortargumente xunits und yunits entgegen, die die Einheiten auf der gegebenen Achse durch Aufruf von Axis.set_units und Axis.update_units aktualisieren.

Zuvor löschte die Übergabe von None den Wert, der in .Axis.units gespeichert war, was wiederum Konverter unterbrach, die auf den Wert in .Axis.units angewiesen waren, um ordnungsgemäß zu funktionieren (insbesondere StrCategoryConverter).

Dies ändert die Semantik von ax.meth(..., xunits=None, yunits=None) von "bitte lösche die Einheiten" zu "mache das Standardverhalten, als ob sie nicht übergeben worden wären", was mit dem Standardverhalten von Matplotlib-Schlüsselwortargumenten übereinstimmt.

Wenn Sie sich darauf verlassen haben, xunits=None an Plot-Methoden zu übergeben, um das Attribut .Axes.units zu löschen, rufen Sie direkt Axis.set_units auf (und Axis.update_units, wenn Sie auch benötigen, dass der Konverter aktualisiert wird).

Annotationen mit annotation_clip wirken sich nicht mehr auf tight_layout aus#

Zuvor gab text.Annotation.get_tightbbox immer die vollständige text.Annotation.get_window_extent des Objekts zurück, unabhängig vom Wert von annotation_clip. text.Annotation.get_tightbbox berücksichtigt nun korrekt diese zusätzliche Clipping-Box, was bedeutet, dass Annotationen, die aufgrund von annotation_clip nicht gezeichnet werden, nicht zur Berechnung der Achsen-Begrenzungsrahmen zählen, wie sie z. B. von tight_layout durchgeführt werden.

Dies stimmt nun mit der API überein, die in Artist beschrieben ist, welche festlegt, dass get_window_extent die vollständigen Ausdehnungen zurückgeben soll und get_tightbbox "etwaiges Clipping berücksichtigen" soll.

Parasite Axes pcolor und pcolormesh setzen nun standardmäßig Rasterkanten auf ganze Zahlen, nicht auf Halbganze#

Dies stimmt mit pcolor und pcolormesh überein.

Die Umrandung von Colorbar ist nun ein Spine#

Die Umrandung von Colorbar ist nun ein Spine und wird als solcher gezeichnet, anstatt als ein als Künstler gezeichnetes Polygon. Dies stellt sicher, dass es immer nach (d. h. über) allen Künstlern gezeichnet wird, wie bei Spines auf normalen Achsen.

Änderungen an Colorbar.dividers#

Dieses Attribut ist nun immer eine LineCollection – eine leere, wenn drawedges False ist. Ihre Standardfarben und Linienbreiten (rcParams["axes.edgecolor"] (Standard: 'black'), rcParams["axes.linewidth"] (Standard: 0.8)) werden nun zum Zeitpunkt der Instanziierung, nicht zum Zeitpunkt der Zeichnung, aufgelöst.

Fehler auslösen oder warnen beim zweimaligen Registrieren einer Colormap#

Wenn matplotlib.cm.register_cmap verwendet wird, um eine vom Benutzer bereitgestellte oder Drittanbieter-Colormap zu registrieren, wird nun ein ValueError ausgelöst, wenn versucht wird, eine der integrierten Colormaps zu überschreiben, und eine Warnung ausgegeben, wenn versucht wird, eine vom Benutzer registrierte Colormap zu überschreiben. Dies kann zukünftig zu Fehlern bei benutzerregistrierten Colormaps führen.

Aufeinanderfolgende gerasterte Zeichnungen werden nun zusammengeführt#

Die Verfolgung der Tiefe von Rasterzeichnungen wurde von backend_mixed.MixedModeRenderer.start_rasterizing und backend_mixed.MixedModeRenderer.stop_rasterizing in artist.allow_rasterization verschoben. Dies bedeutet, dass die Start- und Stoppfunktionen nur aufgerufen werden, wenn die Rasterung tatsächlich gestartet und gestoppt werden muss.

Die Ausgabe von Vektor-Backends ändert sich, wenn gerasterte Elemente zusammengeführt werden. Dies sollte das Erscheinungsbild der Ausgaben nicht verändern.

Die Renderer in Drittanbieter-Backends müssen nun self._raster_depth und self._rasterizing mit 0 bzw. False initialisieren.

Konsistentes Verhalten von draw_if_interactive() über Backends hinweg#

pyplot.draw_if_interactive zeigt das Fenster (falls es zuvor nicht angezeigt wurde) auf den Tk- und nbAgg-Backends nicht mehr an, konsistent mit allen anderen Backends.

Die Künstler-Eigenschaft rasterized kann nicht mehr None sein#

Es ist nun nur noch ein Boolean. Zuvor war der Standardwert None und Artist.set_rasterized wurde dokumentiert, um None zu akzeptieren. None hatte jedoch keine besondere Bedeutung und wurde als False behandelt.

Die Callback-Registry von Canvas wird nun auf Figure gespeichert#

Der kanonische Speicherort der CallbackRegistry zur Verarbeitung von Figur-/Canvas-Ereignissen wurde vom Canvas auf die Figur verlagert. Diese Änderung sollte für fast alle Benutzer transparent sein. Wenn Sie jedoch die Figur von einem Canvas abtrennen oder umgekehrt, kann es zu Verhaltensänderungen kommen.

Harmonisierte Tastenereignisdaten über Backends hinweg#

Die verschiedenen Backends mit Tastenübersetzungsunterstützung behandeln nun "Shift" als manchmal modifizierend, wobei das Präfix 'shift+' nicht hinzugefügt wird, wenn eine Tastenübersetzung vorgenommen wurde.

Im Qt5-Backend enthält das Wörterbuch matplotlib.backends.backend_qt5.SPECIAL_KEYS Schlüssel, die nicht ihren Unicode-Namen zurückgeben, sondern manuell benannte Namen haben. Der Name für QtCore.Qt.Key_Meta wurde zu 'meta' geändert, um mit den anderen GUI-Backends konsistent zu sein.

Das WebAgg-Backend übersetzt nun Tastenanschläge auf nicht-US-Tastaturlayouts korrekt.

In den GTK- und Tk-Backends melden die Nicht-ASCII-Tastendrücke (wie im KeyEvent an key_press_event-Handler übermittelt) nun korrekt Unicode-Zeichen (z. B. €) und respektieren besser die NumLock-Taste auf dem Ziffernblock.

In den GTK- und Tk-Backends wurden die folgenden Tastennamen geändert; die neuen Namen sind konsistent mit denen, die von den Qt-Backends gemeldet werden.

  • Die Taste "Break/Pause" (Keysym 0xff13) wird nun als "pause" anstelle von "break" gemeldet (dies ist auch konsistent mit dem X-Tastennamen).

  • Die "Löschen"-Taste auf dem Ziffernblock wird nun als "delete" anstelle von "dec" gemeldet.

Das WebAgg-Backend meldet einen Mittelklick nicht mehr als Rechtsklick#

Zuvor meldete das Ereignis, das von fig.canvas.mpl_connect('mouse_button_event', callback) an einen Callback übergeben wurde, bei einem Mittelklick im WebAgg-Backend MouseButton.RIGHT anstelle von MouseButton.MIDDLE.

Die ID-Attribute von XML-Tags in SVG-Dateien basieren nun auf SHA256 anstelle von MD5#

Matplotlib generiert eindeutige ID-Attribute für verschiedene Tags in SVG-Dateien. Matplotlib generierte diese eindeutigen IDs zuvor unter Verwendung der ersten 10 Zeichen eines MD5-Hashs. Der MD5-Hashing-Algorithmus ist in Python auf Systemen mit aktivierten Federal Information Processing Standards (FIPS) nicht verfügbar. Matplotlib verwendet nun stattdessen die ersten 10 Zeichen eines SHA256-Hashs. SVG-Dateien, die mit früheren Versionen von matplotlib übereinstimmen würden, haben andere ID-Attribute.

RendererPS.set_font ist im AFM-Modus keine No-Op mehr#

RendererPS.set_font setzt nun in allen Fällen die aktuelle PostScript-Schriftart.

Automatische Skalierung in Axes3D#

In Matplotlib 3.2.0 wurde die automatische Skalierung für 2D-Achsen verzögert, d. h. die Grenzen werden erst neu berechnet, wenn die Canvas tatsächlich gerendert wird oder wenn der Benutzer die Achsen-Grenzen abfragt. Diese Leistungsverbesserung wird nun auf Axes3D erweitert. Dies behebt auch einige Probleme mit der unerwarteten Auslösung der automatischen Skalierung in Axes3D.

Weitere Details finden Sie in der API-Änderung für 2D-Achsen.

Axes3D fügt sich selbst automatisch zur Figure hinzu ist veraltet#

Neue Axes3D-Objekte fügten sich zuvor selbst zu Figuren hinzu, als sie erstellt wurden, im Gegensatz zu allen anderen Achsenklassen, was dazu führte, dass sie zweimal hinzugefügt wurden, wenn fig.add_subplot(111, projection='3d') aufgerufen wurde.

Dieses Verhalten ist nun veraltet und wird eine Warnung ausgeben. Das neue Schlüsselwortargument auto_add_to_figure steuert das Verhalten und kann verwendet werden, um die Warnung zu unterdrücken. Der Standardwert wird in Matplotlib 3.5 auf False geändert und jeder nicht-False-Wert wird in Matplotlib 3.6 ein Fehler sein.

Zukünftig müssen Axes3D explizit zur Figur hinzugefügt werden.

fig = Figure()
# create Axes3D
ax = Axes3d(fig)
# add to Figure
fig.add_axes(ax)

wie es für andere axes.Axes-Unterklassen getan werden muss. Oder es kann eine 3D-Projektion erstellt werden über

fig.add_subplot(projection='3d')

mplot3d.art3d.get_dir_vector gibt immer NumPy-Arrays zurück#

Zur Konsistenz gibt get_dir_vector nun immer NumPy-Arrays zurück, auch wenn die Eingabe ein 3-Element-Iterable ist.

Geänderte Definitionen der Schriftarten Cursive und Fantasy#

Die Schriftarten Comic Sans und Comic Neue wurden von der Standardliste rcParams["font.fantasy"] (Standard: ['Chicago', 'Charcoal', 'Impact', 'Western', 'xkcd script', 'fantasy']) in die Standardeinstellung rcParams["font.cursive"] (Standard: ['Apple Chancery', 'Textile', 'Zapf Chancery', 'Sand', 'Script MT', 'Felipa', 'Comic Neue', 'Comic Sans MS', 'cursive']) verschoben, im Einklang mit den CSS-Schriftfamilien-Beispielen hier und um eine kursive Schriftart bereitzustellen, die im Microsoft Core Fonts-Set enthalten ist.

docstring.Substitution eingerückt jetzt immer Docstrings vor String-Interpolation#

Veralterungen#

Zusätzliche Parameter für den Axes-Konstruktor#

Parameter des Axes-Konstruktors außer fig und rect werden in einer zukünftigen Version als ausschließlich Schlüsselwort-Argumente behandelt.

pyplot.gca und Figure.gca Schlüsselwort-Argumente#

Das Übergeben von Schlüsselwort-Argumenten an pyplot.gca oder figure.Figure.gca wird in einer zukünftigen Version nicht mehr unterstützt.

Axis.cla, RadialAxis.cla, ThetaAxis.cla und Spine.cla#

Diese Methoden sind zugunsten der jeweiligen clear()-Methoden veraltet.

Ungültige Musterzeichen für Schraffuren werden nicht mehr ignoriert#

Beim Angeben von Schraffurmuster werden nicht erkannte Zeichen eine Veraltungswarnung auslösen. In Zukunft wird dies ein harter Fehler sein.

imread Lesen von URLs#

Das Übergeben einer URL an imread() ist veraltet. Bitte öffnen Sie die URL zum Lesen und verwenden Sie direkt die Pillow-API (PIL.Image.open(urllib.request.urlopen(url)) oder PIL.Image.open(io.BytesIO(requests.get(url).content))) stattdessen.

is_url und URL_REGEX#

... sind veraltet. (Sie wurden zuvor im Top-Level-Modul matplotlib definiert.)

Veraltungen in matplotlib.style.core#

STYLE_FILE_PATTERN, load_base_library und iter_user_libraries sind veraltet.

dpi_cor Eigenschaft von FancyArrowPatch#

Dieser Parameter wird als intern betrachtet und ist veraltet.

Übergabe von boxstyle="custom", bbox_transmuter=... an FancyBboxPatch#

Um einen benutzerdefinierten Boxstil zu verwenden, übergeben Sie ihn direkt als Argument boxstyle an FancyBboxPatch. Dies war bereits zuvor möglich und ist konsistent mit benutzerdefinierten Pfeilstilen und Verbindungsstilen.

BoxStyles werden jetzt ohne Übergabe des Parameters mutation_aspect aufgerufen#

Das Mutationsaspekt wird nun vom Künstler selbst gehandhabt. Daher ist der Parameter mutation_aspect von BoxStyle._Base.__call__ veraltet, und benutzerdefinierte Boxstile sollten so implementiert werden, dass sie diesen Parameter nicht benötigen (er kann aus Gründen der Rückwärtskompatibilität als Parameter mit dem Standardwert 1 beibehalten werden).

ContourLabeler.get_label_coords ist veraltet#

Dies wird als interne Hilfsfunktion betrachtet.

Line2D und Patch duplizieren nicht mehr validJoin und validCap#

Die Validierung von Join- und Cap-Stilen ist nun in rcsetup zentralisiert.

Das Setzen des Pickradius eines Line2D über set_picker ist wieder gültig#

Dies hebt die Veraltung auf, die in Matplotlib 3.3.0 eingeführt wurde.

MarkerStyle gilt als unveränderlich#

MarkerStyle.set_fillstyle() und MarkerStyle.set_marker() sind veraltet. Erstellen Sie stattdessen eine neue MarkerStyle mit den entsprechenden Parametern.

MovieWriter.cleanup ist veraltet#

Die Bereinigungslogik ist nun vollständig in MovieWriter.finish implementiert. Drittanbieter-Movie-Writer sollten die relevante Bereinigungslogik ebenfalls dorthin verschieben, da überschriebene cleanups in Zukunft nicht mehr aufgerufen werden.

minimumdescent Parameter/Eigenschaft von TextArea#

offsetbox.TextArea verhält sich seit Matplotlib 1.3 so, als ob minimumdescent immer True wäre (unabhängig vom gesetzten Wert), daher ist der Parameter/die Eigenschaft veraltet.

colorbar warnt nun, wenn die Achsen des Mappables von den aktuellen Achsen abweichen#

Derzeit stehlen Figure.colorbar und pyplot.colorbar standardmäßig Platz von den aktuellen Achsen, um die Farbleiste zu platzieren. In einer zukünftigen Version werden sie stattdessen Platz von den Achsen des Mappables stehlen. Als Vorbereitung auf diese Änderung geben Figure.colorbar und pyplot.colorbar nun eine Warnung aus, wenn die aktuellen Achsen nicht mit den Achsen des Mappables übereinstimmen.

Farbleisten-Docstrings#

Die folgenden globalen Variablen in matplotlib.colorbar sind veraltet: colorbar_doc, colormap_kw_doc, make_axes_kw_doc.

ColorbarPatch und colorbar_factory sind veraltet#

Alle relevanten Funktionalitäten wurden in die Klasse Colorbar verschoben.

Backend-Veraltungen#

  • FigureCanvasBase.get_window_title und FigureCanvasBase.set_window_title sind veraltet. Verwenden Sie die entsprechenden Methoden des FigureManagers, wenn Sie pyplot verwenden, oder GUI-spezifische Methoden beim Einbetten.

  • Der Parameter resize_callback für FigureCanvasTk wurde intern nie verwendet und ist veraltet. Tk-spezifische benutzerdefinierte Ereignisbehandler für Größenänderungsereignisse können zu einem FigureCanvasTk hinzugefügt werden, indem z. B. get_tk_widget().bind('<Configure>', ..., True) verwendet wird.

  • Die Methoden key_press und button_press von FigureManagerBase, die bei Verwendung von toolmanager fälschlicherweise nichts taten, sind zugunsten der direkten Übergabe des Ereignisses an die CallbackRegistry über self.canvas.callbacks.process(event.name, event) veraltet.

  • RendererAgg.get_content_extents und RendererAgg.tostring_rgba_minimized sind veraltet.

  • backend_pgf.TmpDirCleaner ist veraltet, ohne Ersatz.

  • GraphicsContextPS ist veraltet. Das PostScript-Backend verwendet nun GraphicsContextBase.

Bereinigungen im wx-Backend#

Der Parameter origin für _FigureCanvasWxBase.gui_repaint ist veraltet und hat keinen Ersatz; gui_repaint erkennt nun automatisch den Fall, wenn es mit dem wx-Renderer verwendet wird.

Die Methode NavigationToolbar2Wx.get_canvas ist veraltet; instanziieren Sie bei Bedarf direkt eine Leinwand (FigureCanvasWxAgg(frame, -1, figure)).

Unbenutzte Positionsargumente für print_<fmt>-Methoden sind veraltet#

Keine der von Canvas-Unterklassen implementierten print_<fmt>-Methoden verwendete andere Positionsargumente als das erste (den Ausgabedateinamen oder das dateiähnliche Objekt), daher sind diese zusätzlichen Parameter veraltet.

Der dpi-Parameter von FigureCanvas.print_foo-Druckern ist veraltet#

Die savefig-Maschinerie hat bereits die Einstellung der Figure-DPI auf den gewünschten Wert übernommen, sodass print_foo diese direkt davon lesen kann. Das Nicht-Übergeben von dpi an print_foo ermöglicht eine klarere Erkennung von unbenutzten Parametern, die an savefig übergeben werden.

Übergabe von bytes an FT2Font.set_text#

... ist veraltet, übergeben Sie stattdessen str.

ps.useafm ist für Mathtext veraltet#

Die Ausgabe von Mathtext nur mit Standard-PostScript-Schriftarten ist wahrscheinlich schon seit einiger Zeit fehlerhaft (siehe Issue #18722). In Matplotlib 3.5 hat die Einstellung rcParams["ps.useafm"] (Standard: False) keine Auswirkung auf Mathtext.

MathTextParser("bitmap") ist veraltet#

Die zugehörigen APIs MathtextBackendBitmap, MathTextParser.to_mask, MathTextParser.to_rgba, MathTextParser.to_png und MathTextParser.get_depth sind ebenfalls veraltet.

Um einen Textstring in ein Bild zu konvertieren, zeichnen Sie den Text direkt auf eine leere Figure und speichern Sie die Figure mit einer engen Bounding Box, wie in Texte in Bilder konvertieren gezeigt, oder verwenden Sie mathtext.math_to_image.

Bei Verwendung von math_to_image kann die Textfarbe gesetzt werden mit z.B.

with plt.rc_context({"text.color": "tab:blue"}):
    mathtext.math_to_image(text, filename)

und ein RGBA-Array kann erhalten werden mit z.B.

from io import BytesIO
buf = BytesIO()
mathtext.math_to_image(text, buf, format="png")
buf.seek(0)
rgba = plt.imread(buf)

Veraltung von Mathtext-Interna#

Die folgenden API-Elemente, die zuvor vom Modul mathtext exponiert wurden, gelten als Implementierungsdetails und der öffentliche Zugriff darauf ist veraltet

  • Fonts und alle seine Unterklassen,

  • FontConstantsBase und alle seine Unterklassen,

  • Node und alle seine Unterklassen,

  • Ship, ship,

  • Error,

  • Parser,

  • SHRINK_FACTOR, GROW_FACTOR,

  • NUM_SIZE_LEVELS,

  • latex_to_bakoma, latex_to_cmex, latex_to_standard,

  • stix_virtual_fonts,

  • tex2uni.

Veraltung verschiedener Mathtext-Helfer#

Die Klassen MathtextBackendPdf, MathtextBackendPs, MathtextBackendSvg und MathtextBackendCairo aus dem Modul mathtext sowie die entsprechenden Attribute .mathtext_parser auf RendererPdf, RendererPS, RendererSVG und RendererCairo sind veraltet. Die Klasse MathtextBackendPath kann verwendet werden, um eine Liste von Glyphen und Rechtecken in einem Mathtext-Ausdruck zu erhalten, und Renderer-spezifische Logik sollte direkt im Renderer implementiert werden.

StandardPsFonts.pswriter ist unbenutzt und veraltet.

Widget-Klassen-Interna#

Mehrere interne Elemente der Klasse widgets.Widget wurden privatisiert und sind veraltet

  • AxesWidget.cids

  • Button.cnt und Button.observers

  • CheckButtons.cnt und CheckButtons.observers

  • RadioButtons.cnt und RadioButtons.observers

  • Slider.cnt und Slider.observers

  • TextBox.cnt, TextBox.change_observers und TextBox.submit_observers

3D-Eigenschaften an Renderern#

Die Eigenschaften der 3D-Achsen, die während des Zeichnens auf den Renderer gelegt wurden, sind nun veraltet

  • renderer.M

  • renderer.eye

  • renderer.vvec

  • renderer.get_axis_position

Diese Attribute sind alle über Axes3D zugänglich, auf die über self.axes auf allen Artists zugegriffen werden kann.

renderer-Argument der Methode do_3d_projection für Collection3D/Patch3D#

Das renderer-Argument für die Methode do_3d_projection für Collection3D und Patch3D ist nicht mehr erforderlich, und die Übergabe während des Zeichnens ist veraltet.

project-Argument der Methode draw für Line3DCollection#

Das project-Argument für die Methode draw für Line3DCollection ist veraltet. Rufen Sie stattdessen explizit Line3DCollection.do_3d_projection auf.

Zusätzliche Positionsargumente für plot_surface und plot_wireframe#

Positionsargumente für plot_surface und plot_wireframe außer X, Y und Z sind veraltet. Übergeben Sie zusätzliche Künstler-Eigenschaften stattdessen als Schlüsselwort-Argumente.

Klasse ParasiteAxesAuxTransBase#

Die Funktionalität dieser Mixin-Klasse wurde in die Basisklasse ParasiteAxesBase verschoben. Daher sind ParasiteAxesAuxTransBase, ParasiteAxesAuxTrans und parasite_axes_auxtrans_class_factory veraltet.

Im Allgemeinen wird empfohlen, HostAxes.get_aux_axes zum Erstellen von Parasiten-Achsen zu verwenden, da dies die Notwendigkeit erspart, den Parasiten manuell an host.parasites anzuhängen und sicherstellt, dass ihre remove()-Methode ordnungsgemäß funktioniert.

Attribut AxisArtist.ZORDER#

Verwenden Sie stattdessen AxisArtist.zorder.

Invalidierung von GridHelperBase#

Die Methoden GridHelperBase.invalidate, GridHelperBase.valid und axislines.Axes.invalidate_grid_helper gelten als intern und sind veraltet.

sphinext.plot_directive.align#

... ist veraltet. Verwenden Sie stattdessen docutils.parsers.rst.directives.images.Image.align.

Entfernungen#

Die folgenden veralteten APIs wurden entfernt

Entferntes Verhalten#

  • Die Funktionalität für "intelligente Grenzen" für Axis und Spine wurde gelöscht und die zugehörigen Methoden entfernt.

  • Die Konvertierung einer Zeichenkette mit einzelnen Farbzeichen (z. B. 'cymk') in to_rgba_array wird nicht mehr unterstützt. Stattdessen können die Farben einzeln in einer Liste übergeben werden (z. B. ['c', 'y', 'm', 'k']).

  • Das Zurückgeben eines Faktors gleich None von mpl_toolkits.axisartist Locators (die nicht dasselbe sind wie "standardmäßige" Tick-Locators) oder das Übergeben eines Faktors gleich None an axisartist Formatters (die nicht dasselbe sind wie "standardmäßige" Tick-Formatters) wird nicht mehr unterstützt. Übergeben Sie stattdessen einen Faktor gleich 1.

Module#

  • Das gesamte Modul matplotlib.testing.disable_internet wurde entfernt. Das pytest-remotedata-Paket kann stattdessen verwendet werden.

  • Das Modul mpl_toolkits.axes_grid1.colorbar und seine Farbleistenimplementierung wurden zugunsten von matplotlib.colorbar entfernt.

Klassen, Methoden und Attribute#

  • Die Methoden .set_dirty(), .ensure_not_dirty() und .reset_available_writers() der animation.MovieWriterRegistry taten nichts und wurden entfernt. Die Methode .avail() wurde entfernt; verwenden Sie stattdessen .list(), um eine Liste der verfügbaren Writer zu erhalten.

  • Die Attribute matplotlib.artist.Artist.eventson und matplotlib.container.Container.eventson hatten keine Auswirkung und wurden entfernt.

  • matplotlib.axes.Axes.get_data_ratio_log wurde entfernt.

  • matplotlib.axes.SubplotBase.rowNum; verwenden Sie stattdessen ax.get_subplotspec().rowspan.start.

  • matplotlib.axes.SubplotBase.colNum; verwenden Sie stattdessen ax.get_subplotspec().colspan.start.

  • matplotlib.axis.Axis.set_smart_bounds und matplotlib.axis.Axis.get_smart_bounds wurden entfernt.

  • matplotlib.colors.DivergingNorm wurde in TwoSlopeNorm umbenannt.

  • matplotlib.figure.AxesStack wurde entfernt.

  • matplotlib.font_manager.JSONEncoder wurde entfernt; verwenden Sie font_manager.json_dump, um eine FontManager-Instanz zu schreiben.

  • Die Methoden .as_array(), .as_rgba_str(), .as_str(), .get_height() und .get_width() von matplotlib.ft2font.FT2Image wurden entfernt. Konvertieren Sie die FT2Image mit np.asarray in ein NumPy-Array, bevor Sie sie verarbeiten.

  • matplotlib.quiver.QuiverKey.quiverkey_doc wurde entfernt; verwenden Sie stattdessen matplotlib.quiver.QuiverKey.__init__.__doc__.

  • matplotlib.spines.Spine.set_smart_bounds und matplotlib.spines.Spine.get_smart_bounds wurden entfernt.

  • matplotlib.testing.jpl_units.UnitDbl.checkUnits wurde entfernt; verwenden Sie stattdessen units not in self.allowed.

  • Die ungenutzte Methode matplotlib.ticker.Locator.autoscale wurde entfernt (übergeben Sie stattdessen die Achsenlimits an Locator.view_limits). Die abgeleiteten Methoden Locator.autoscale, AutoDateLocator.autoscale, RRuleLocator.autoscale, RadialLocator.autoscale, ThetaLocator.autoscale und YearLocator.autoscale wurden ebenfalls entfernt.

  • matplotlib.transforms.BboxBase.is_unit wurde entfernt; prüfen Sie bei Bedarf die Bbox-Begrenzungen.

  • matplotlib.transforms.Affine2DBase.matrix_from_values(...) wurde entfernt; verwenden Sie stattdessen (zum Beispiel) Affine2D.from_values(...).get_matrix().

  • matplotlib.backend_bases.FigureCanvasBase.draw_cursor wurde entfernt.

  • Die Methoden matplotlib.backends.backend_gtk.ConfigureSubplotsGTK3.destroy und matplotlib.backends.backend_gtk.ConfigureSubplotsGTK3.init_window wurden entfernt.

  • Die Eigenschaft matplotlib.backends.backend_gtk.ConfigureSubplotsGTK3.window wurde entfernt.

  • matplotlib.backends.backend_macosx.FigureCanvasMac.invalidate wurde entfernt.

  • matplotlib.backends.backend_pgf.RendererPgf.latexManager wurde entfernt.

  • matplotlib.backends.backend_wx.FigureFrameWx.statusbar, matplotlib.backends.backend_wx.NavigationToolbar2Wx.set_status_bar und matplotlib.backends.backend_wx.NavigationToolbar2Wx.statbar wurden entfernt. Die Statusleiste kann durch Aufrufen von Standard-wx-Methoden abgerufen werden (frame.GetStatusBar() und toolbar.GetTopLevelParent().GetStatusBar()).

  • matplotlib.backends.backend_wx.ConfigureSubplotsWx.configure_subplots und matplotlib.backends.backend_wx.ConfigureSubplotsWx.get_canvas wurden entfernt.

  • mpl_toolkits.axisartist.grid_finder.GridFinderBase wurde entfernt; verwenden Sie stattdessen GridFinder.

  • mpl_toolkits.axisartist.axis_artist.BezierPath wurde entfernt; verwenden Sie stattdessen patches.PathPatch.

Funktionen#

  • matplotlib.backends.backend_pgf.repl_escapetext und matplotlib.backends.backend_pgf.repl_mathdefault wurden entfernt.

  • matplotlib.checkdep_ps_distiller wurde entfernt.

  • matplotlib.cm.revcmap wurde entfernt; verwenden Sie stattdessen Colormap.reversed.

  • matplotlib.colors.makeMappingArray wurde entfernt.

  • matplotlib.compare_versions wurde entfernt; verwenden Sie Vergleiche von distutils.version.LooseVersions stattdessen.

  • matplotlib.dates.mx2num wurde entfernt.

  • matplotlib.font_manager.createFontList wurde entfernt; font_manager.FontManager.addfont ist jetzt verfügbar, um eine Schriftart unter einem bestimmten Pfad zu registrieren.

  • matplotlib.get_home wurde entfernt; verwenden Sie stattdessen die Standardbibliothek.

  • matplotlib.mlab.apply_window und matplotlib.mlab.stride_repeat wurden entfernt.

  • matplotlib.rcsetup.update_savefig_format wurde entfernt; dies ersetzte nur 'auto' durch 'png', tun Sie dasselbe.

  • matplotlib.rcsetup.validate_animation_writer_path wurde entfernt.

  • matplotlib.rcsetup.validate_path_exists wurde entfernt; verwenden Sie stattdessen os.path.exists oder pathlib.Path.exists.

  • matplotlib.style.core.is_style_file und matplotlib.style.core.iter_style_files wurden entfernt.

  • matplotlib.testing.is_called_from_pytest wurde entfernt.

  • mpl_toolkits.mplot3d.axes3d.unit_bbox wurde entfernt; verwenden Sie stattdessen Bbox.unit.

Argumente#

rcParams#

  • Die rcParam datapath wurde entfernt. Verwenden Sie stattdessen matplotlib.get_data_path.

  • Die rcParam mpl_toolkits.legacy_colorbar hat keine Auswirkung und wurde entfernt.

  • Das Setzen von rcParams["boxplot.whiskers"] (Standard: 1.5) auf "range" ist nicht mehr gültig; setzen Sie es stattdessen auf 0, 100.

  • Das Setzen von rcParams["savefig.format"] (Standard: 'png') auf "auto" ist nicht mehr gültig; verwenden Sie stattdessen "png".

  • Das Setzen von rcParams["text.hinting"] (Standard: 'force_autohint') auf False oder True ist nicht mehr gültig; setzen Sie es stattdessen auf "auto" bzw. "none".

Entfernung von sample_data#

Die unten aufgeführten Beispieldatensätze wurden entfernt. Vorgeschlagene Ersatzmöglichkeiten für Demonstrationszwecke sind in Klammern angegeben.

  • None_vs_nearest-pdf.png,

  • aapl.npz (verwenden Sie goog.npz),

  • ada.png, grace_hopper.png (verwenden Sie grace_hopper.jpg),

  • ct.raw.gz (verwenden Sie s1045.ima.gz),

  • damodata.csv (verwenden Sie msft.csv).

Entwicklungsänderungen#

Erhöhung der minimal unterstützten Versionen von Python und Abhängigkeiten#

Für Matplotlib 3.4 werden die minimal unterstützten Versionen angehoben

Abhängigkeit

min in mpl3.3

min in mpl3.4

Python

3.6

3.7

dateutil

2.1

2.7

numpy

1.15

1.16

pyparsing

2.0.3

2.2.1

Dies stimmt mit unserer Richtlinie für minimale Abhängigkeiten und NEP29 überein

Qhull wird zur Build- oder sdist-Erstellungszeit heruntergeladen#

Ähnlich wie FreeType wird Qhull nun zur Build-Zeit oder bei der Erstellung des sdist heruntergeladen. Um gegen die System-Qhull zu linken, setzen Sie die Option system_qhull in der Datei setup.cfg auf True. Beachten Sie, dass Matplotlib nun die reentrant-Version von Qhull (qhull_r) benötigt.

Klasse FigureBase hinzugefügt und Klasse Figure zu einem Kind gemacht#

Die neue Subfigure-Funktion hat eine Umstrukturierung der figure.Figure-Klasse motiviert, so dass die neue Klasse figure.SubFigure alle Fähigkeiten einer Figure haben konnte.

Die Klasse figure.Figure ist nun eine Unterklasse von figure.FigureBase, wobei figure.FigureBase Figure-Level-Artist-Hinzufügungsroutinen enthält, und die Unterklasse figure.Figure nur Features enthält, die für die äußere Figure einzigartig sind.

Beachten Sie, dass es eine neue Transformasjon transSubfigure gibt, die mit der Subfigure verbunden ist. Diese Transformasjon existiert auch für eine Figure-Instanz und ist in diesem Fall gleich transFigure. Code, der den Transformasjon-Stack verwendet und Objekte entweder auf der übergeordneten Figure oder auf einer der Subfigures platzieren möchte, sollte transSubfigure verwenden.