API-Änderungen für 3.2.0#

Verhaltensänderungen#

Reduzierter Standardwert für rcParams["axes.formatter.limits"] (Standard: [-5, 6])#

Der Standardwert von rcParams["axes.formatter.limits"] (Standard: [-5, 6]) wurde von -7, 7 auf -5, 6 geändert, um die Lesbarkeit zu verbessern.

(Quellcode, 2x.png, png)

matplotlib.colorbar.Colorbar verwendet nicht normalisierte Achsen für alle Mappables#

Vor 3.0 normalisierte matplotlib.colorbar.Colorbar (colorbar) alle Achsenlimits zwischen 0 und 1 und hatte benutzerdefinierte Ticker zur Beschriftung der Farbleisten-Ticks. Nach 3.0 wurden Farbleisten, die aus Mappables konstruiert wurden, die *keine* Konturen waren, mit Achsen konstruiert, deren Limits zwischen vmin und vmax der Norm des Mappables lagen, und die Ticker wurden zu Kindern der normalen Achsen-Ticker gemacht.

Diese Version von Matplotlib erweitert dies auf Mappables, die durch Konturen erstellt wurden, und ermöglicht es den Achsen, zwischen der niedrigsten und der höchsten Grenze der Kontur zu verlaufen.

Code, der die Normalisierung zwischen 0 und 1 umging, muss geändert werden.

MovieWriterRegistry#

MovieWriterRegistry prüft nun immer die Verfügbarkeit der Writer-Klassen, bevor sie zurückgegeben werden. Wenn man beispielsweise den ersten verfügbaren Writer erhalten möchte, ohne die Verfügbarkeitsprüfung für nachfolgende Writer durchzuführen, ist es nun möglich, über das Registry zu iterieren, was die Namen der verfügbaren Klassen liefert.

Automatische Skalierung

Matplotlib berechnete die autoskalierten Limits nach jedem Plotting-Aufruf (plot(), bar() usw.) neu. Nun geschieht dies nur noch, wenn die Leinwand tatsächlich gerendert wird oder wenn der Benutzer die Achsenlimits abfragt. Dies ist eine wesentliche Leistungsverbesserung für Plots mit einer großen Anzahl von Künstlern.

Insbesondere bedeutet dies, dass manuell mit Axes.add_line, Axes.add_patch usw. hinzugefügte Künstler von der automatischen Skalierung berücksichtigt werden, auch ohne expliziten Aufruf von Axes.autoscale_view.

In einigen Fällen kann dies zu unterschiedlichen gemeldeten Limits führen. Wenn dies ein Problem darstellt, sollten Sie eine Zeichnung mit fig.canvas.draw() auslösen.

Die automatische Skalierung wurde auch für Künstler geändert, die auf der Klasse Collection basieren. Zuvor versuchte die Methode, die automatische Limits berechnet (Collection.get_datalim), die Größe von Objekten in der Sammlung zu berücksichtigen und die Limits so groß zu machen, dass kein Objekt abgeschnitten wird. Das heißt, für Axes.scatter wären die Limits groß genug gemacht worden, um keine Marker im Scatter abzuschneiden. Dies ist problematisch, wenn die Objektgröße in physischen Einheiten oder relativ zur Abbildung angegeben wird, da die Umwandlung von physischen Einheiten in Datenlimits die Kenntnis der Datenlimits erfordert und ungültig wird, wenn die neuen Limits angewendet werden. Dies ist ein inverses Problem, das theoretisch lösbar ist (wenn das Objekt physisch kleiner als die Achsen ist), aber die zusätzliche Komplexität wurde nicht als lohnenswert erachtet, insbesondere da der häufigste Anwendungsfall für Marker in Scatter-Diagrammen normalerweise klein genug ist, um von den Standard-Datenlimit-Rändern aufgenommen zu werden.

Während das neue Verhalten algorithmisch einfacher ist, ist es bedingt durch die Eigenschaften des Collection-Objekts

  1. offsets = None, transform ist ein Kind von Axes.transData: Verwenden Sie die Pfade für die automatischen Limits (d.h. für LineCollection in Axes.streamplot).

  2. offsets != None, und offset_transform ist ein Kind von Axes.transData

    1. transform ist ein Kind von Axes.transData: Verwenden Sie path + offset für die Limits (d.h. für Axes.bar).

    2. transform ist kein Kind von Axes.transData: Verwenden Sie einfach die Offsets für die Limits (d.h. für Scatter).

  3. andernfalls geben Sie ein leeres Bbox zurück.

Obwohl dies kompliziert erscheint, besteht die Logik darin, die Informationen aus den Objekten zu verwenden, die sich im Datenraum befinden, für die Limits, aber nicht Informationen, die sich in physischen Einheiten befinden.

Logarithmische Skala bar() / hist() Autolimits#

Die Berechnung der Autolimits in bar und hist, wenn die Achsen bereits eine logarithmische Skala verwenden, wurde geändert, um mit der Berechnung übereinzustimmen, wenn die Achsen nach dem Aufruf von bar und hist auf logarithmische Skala umgeschaltet werden, und beim Aufruf von bar(..., log=True) / hist(..., log=True): Wenn es mindestens zwei verschiedene Balkenhöhen gibt, werden die normalen Achsenränder zu ihnen hinzugefügt (in logarithmischer Skala); wenn es nur eine einzige Balkenhöhe gibt, werden die Achsenlimits um eine Größenordnung um diese erweitert und dann Achsenränder angewendet.

Achsenbeschriftungen über mehrere Zeilen/Spalten hinweg#

Axes.label_outer hält nun korrekt die X-Achsenbeschriftungen und Ticks für Achsen sichtbar, die sich über mehrere Zeilen erstrecken, solange sie die letzte Zeile des Achsenrasters abdecken. (Dies stimmt mit der Anzeige der Y-Achsenbeschriftungen und Ticks für Achsen überein, die sich über mehrere Spalten erstrecken, solange sie die erste Spalte des Achsenrasters abdecken.)

Die Methoden Axes.is_last_row und Axes.is_last_col geben nun korrekt True für Achsen zurück, die sich über mehrere Zeilen erstrecken, solange sie die letzte Zeile bzw. Spalte abdecken. Dies stimmt wieder mit dem Verhalten für Achsen überein, die die erste Zeile oder Spalte abdecken.

Die Attribute Axes.rowNum und Axes.colNum sind veraltet, da sie sich nur auf die erste Gitterzelle beziehen, die von der Achse abgedeckt wird. Verwenden Sie stattdessen die neuen Eigenschaften ax.get_subplotspec().rowspan und ax.get_subplotspec().colspan, die range-Objekte sind, die den gesamten Spalten- und Zeilenbereich angeben, der von dem Unterplot abgedeckt wird.

(Beachten Sie, dass alle hier erwähnten Methoden und Attribute tatsächlich nur auf der Subplot-Unterklasse von Axes existieren, die für Gitter-positionierte Achsen verwendet wird, aber nicht für Achsen, die direkt in absoluten Koordinaten positioniert sind.)

Die Klasse GridSpec hat die Eigenschaften nrows und ncols als explizitere Synonyme für die Parameter erhalten, die von GridSpec.get_geometry zurückgegeben werden.

Locator

Wenn mehr als Locator.MAXTICKS Ticks generiert werden, hat sich das Verhalten von Locator.raise_if_exceeds von der Auslösung eines RuntimeError auf die Ausgabe eines Logs auf WARNING-Ebene geändert.

Nicht-singuläre Locator

Locator.nonsingular (eingeführt in mpl 3.1), DateLocator.nonsingular und AutoDateLocator.nonsingular geben nun einen Bereich v0, v1 zurück, bei dem v0 <= v1 gilt. Dieses Verhalten entspricht der Implementierung von nonsingular durch die Unterklassen LogLocator und LogitLocator.

get_data_ratio#

Axes.get_data_ratio berücksichtigt nun die Achsenskala (linear, log, logit usw.), bevor das Verhältnis von Y zu X berechnet wird. Diese Änderung ermöglicht die Anwendung fester Seitenverhältnisse auf jede Kombination von X- und Y-Skalen.

Künstler-Randkanten

Zuvor war das Attribut sticky_edges von Künstlern eine Liste von Werten, so dass, wenn ein Achsenlimit mit einer Randkante übereinstimmte, es nicht durch die Achsenränder erweitert wurde (dies ist der Mechanismus, der z. B. verhindert, dass Ränder um Bilder hinzugefügt werden).

sticky_edges haben nun eine zusätzliche Auswirkung auf die Anwendung von Rändern: Selbst wenn ein Achsenlimit nicht mit einer Randkante übereinstimmte, kann es durch die Anwendung von Rändern *keine* Randkante überschreiten – stattdessen erweitern die Ränder das Achsenlimit nur, bis es an der Randkante anstößt.

Diese Änderung verbessert die Ränder von Achsen, die einen streamplot anzeigen

  • Wenn der Streamplot bis zu den Rändern des Vektorfeldes reicht, werden die Achsenlimits genau auf die Grenzen des Vektorfeldes gesetzt (während sie zuvor manchmal um einen kleinen Fließkommafehler abwichen).

  • Wenn der Streamplot die Ränder des Vektorfeldes nicht erreicht (z.B. durch die Verwendung von start_points und maxlength), dann wird die Randerweiterung die Grenzen des Vektorfeldes nicht mehr überschreiten.

Diese Änderung wird auch intern verwendet, um sicherzustellen, dass Polarkoordinatenplots keine negativen r-Werte anzeigen, es sei denn, der Benutzer übergibt tatsächlich einen negativen Wert.

gid in SVG-Ausgabe#

Zuvor, wenn eine Abbildung, Achse, Legende oder andere Künstler eine benutzerdefinierte gid hatten (z.B. über .set_gid()), wurde dies nicht in der SVG-Ausgabe reflektiert. Stattdessen wurde eine Standard-gid, wie z.B. figure_1, angezeigt. Dies ist nun behoben, sodass z.B. fig.set_gid("myfigure") korrekt als <g id="myfigure"> in der SVG-Datei angezeigt wird. Wenn Sie sich auf die Standardformatierung der gid verlassen haben, müssen Sie nun sicherstellen, dass Sie den gid-Parameter der Künstler nicht setzen.

Schriftarten#

Das Erraten des Schriftgewichtes prüft nun zuerst, ob das FT_STYLE_BOLD_FLAG vorhanden ist, bevor versucht wird, Teilzeichenketten im Schriftartnamen abzugleichen. Insbesondere bedeutet dies, dass Times New Roman Bold nun korrekt als fett erkannt wird, nicht als normale Schriftstärke.

Farbe-ähnliche Prüfung#

matplotlib.colors.is_color_like gab zuvor für alle String-Darstellungen von Gleitkommazahlen True zurück. Nur diejenigen mit Werten von 0-1 sind jedoch gültige Farben (die Graustufenwerte darstellen). is_color_like gibt nun False für String-Darstellungen von Gleitkommazahlen außerhalb von 0-1 zurück.

Standard-Bildinterpolation#

Bilder, die in Matplotlib angezeigt wurden, verwendeten zuvor die Nachbar-Interpolation, was zu Aliasing-Effekten bei Verkleinerung und nicht-ganzzahliger Vergrößerung führte.

Neuer Standard für rcParams["image.interpolation"] (Standard: 'auto') ist die neue Option "antialiased". imshow(A, interpolation='antialiased') wendet einen Hanning-Filter beim Resampling der Daten in A für die Anzeige (oder Speicherung in eine Datei) an, *wenn* die Vergrößerungsrate kleiner als Faktor drei und keine Ganzzahl ist; verkleinerte Daten werden beim Resampling immer geglättet.

Um das alte Verhalten zu erhalten, setzen Sie rcParams["image.interpolation"] (Standard: 'auto') auf den alten Standard "nearest" (oder geben Sie das interpolation-Keyword-Argument von Axes.imshow an).

Um immer das Anti-Aliasing-Verhalten zu erhalten, unabhängig von der Vergrößerungs-/Verkleinerungsrate, setzen Sie rcParams["image.interpolation"] (Standard: 'auto') auf "hanning" (oder einen der anderen verfügbaren Filter).

Beachten Sie, dass der "hanning"-Filter gewählt wurde, da er nur einen geringen Leistungsverlust hat. Anti-Aliasing kann mit anderen Filtern verbessert werden.

rcParams#

Bei Verwendung von RendererSVG mit rcParams["svg.image_inline"] == True verwenden extern geschriebene Bilder nun einen einzigen Zähler, auch wenn das Attribut renderer.basename überschrieben wird, anstatt einen Zähler pro Basisnamen.

Diese Änderung wirkt sich nur auf Sie aus, wenn Sie rcParams["svg.image_inline"] = True (Standard ist False) verwendet haben *und* manuell renderer.basename geändert haben.

Der Standardwert von rcParams["axes.formatter.limits"] (Standard: [-5, 6]) wurde von -7, 7 auf -5, 6 geändert, um die Lesbarkeit zu verbessern.

add_subplot()#

Figure.add_subplot() und pyplot.subplot() akzeptieren kein *figure*-Schlüsselwortargument mehr. Es funktionierte ohnehin nur, wenn die übergebene Abbildung self oder die aktuelle Abbildung war.

indicate_inset()#

In <= 3.1.0 wurde indicate_inset und indicate_inset_zoom als Rückgabe eines 4-Tupels von ConnectionPatch dokumentiert, tatsächlich gab es jedoch eine Liste der Länge 4 zurück.

Sie geben nun korrekt ein 4-Tupel zurück. indicate_inset würde zuvor einen Fehler auslösen, wenn die optionale inset_ax nicht übergeben wurde; sie schließt nun erfolgreich ab und gibt None anstelle des Tupels von ConnectionPatch zurück.

PGF-Backend#

Die Funktion get_canvas_width_height des PGF-Backends gibt nun die Canvas-Größe in Anzeigeeinheiten zurück, anstatt in Zoll, wie es zuvor der Fall war. Das neue Verhalten ist das korrekte, gegeben die Verwendung von get_canvas_width_height im restlichen Code.

Das PGF-Backend bindet nun Bilder mit \includegraphics anstelle von \pgfimage ein, wenn die Version von graphicx aktuell genug ist, um die Option interpolate zu unterstützen (dies wird automatisch erkannt).

cbook#

Der Standardwert des Parameters "obj_type" für cbook.warn_deprecated wurde von "attribute" (ein Standardwert, der intern nie verwendet wurde) in eine leere Zeichenkette geändert.

Tests

Die Test-Suite schaltet den Python-Fehlerbehandler nicht mehr standardmäßig ein. Setzen Sie die Standardumgebungsvariable PYTHONFAULTHANDLER, um dies zu tun.

Backend supports_blit#

Backends müssen das Flag supports_blit nicht mehr explizit definieren. Dies ist nur für Backend-Entwickler relevant. Backends mussten das Flag supports_blit definieren. Dies ist nicht mehr notwendig, da die Blitting-Fähigkeit nun automatisch erkannt wird.

Änderungen bei Ausnahmen#

Verschiedene APIs, die einen ValueError für falsch typisierte Eingaben auslösten, lösen nun stattdessen TypeError aus: backend_bases.GraphicsContextBase.set_clip_path, blocking_input.BlockingInput.__call__, matplotlib.cm.register_cmap, dviread.DviFont, rcsetup.validate_hatch, .rcsetup.validate_animation_writer_path, spines.Spine, viele Klassen im Modul matplotlib.transforms und im Paket matplotlib.tri, sowie Achsenmethoden, die einen Parameter norm entgegennehmen.

Wenn zusätzliche Schlüsselwortargumente an LogScale übergeben werden, wird nun ein TypeError anstelle eines ValueError ausgelöst.

Automatische Registrierung von mplot3d#

mpl_toolkits.mplot3d wird nun standardmäßig immer registriert. Es ist nicht mehr notwendig, mplot3d zu importieren, um 3D-Achsen mit

ax = fig.add_subplot(111, projection="3d")

SymLogNorm hat nun einen base-Parameter#

Zuvor hatte SymLogNorm kein base-Schlüsselwortargument und die Basis war fest auf base=np.e codiert. Dies war inkonsistent mit dem Standardverhalten von SymmetricalLogScale (das standardmäßig base=10 verwendet) und der Verwendung des Wortes "decade" in der Dokumentation.

In Vorbereitung auf die Änderung des Standardbasis auf 10 gibt ein Aufruf von SymLogNorm ohne das neue base-Schlüsselwortargument eine Deprecation-Warnung aus.

Veralterungen#

matplotlib.use#

Der Parameter warn für matplotlib.use() ist veraltet (fangen Sie die ImportError, die bei einem Fehler beim Wechseln des Backends ausgelöst wird, und lösen Sie bei Bedarf selbst eine Warnung erneut aus).

plotfile#

.pyplot.plotfile ist zugunsten des separaten Ladens und Plotten der Daten veraltet. Verwenden Sie pandas oder NumPy, um Daten zu laden, und pandas oder Matplotlib, um die resultierenden Daten zu plotten.

Achsen und Achse#

Das Setzen von Axis.major.locator, Axis.minor.locator, Axis.major.formatter oder Axis.minor.formatter auf ein Objekt, das keine Unterklasse von Locator oder Formatter (jeweils) ist, ist veraltet. Beachten Sie, dass diese Attribute normalerweise mit Axis.set_major_locator, Axis.set_minor_locator usw. gesetzt werden sollten, die bereits eine Ausnahme auslösen, wenn ein Objekt der falschen Klasse übergeben wird.

Das Übergeben von mehr als einem Positionsargument oder nicht unterstützten Schlüsselwortargumenten an axis() ist veraltet (solche Argumente wurden bisher stillschweigend ignoriert).

minor Argument wird schlüsselwortbasiert (keyword-only)#

Die Verwendung des Parameters minor für get_*ticks() / set_*ticks() als Positionsargument ist veraltet. Es wird in zukünftigen Versionen schlüsselwortbasiert (keyword-only) sein.

axes_grid1#

Das Modul mpl_toolkits.axes_grid1.colorbar und seine Farbleistenimplementierung sind zugunsten von matplotlib.colorbar veraltet, da ersteres im Wesentlichen aufgegeben wurde und letzteres eine funktionsreichere Alternative mit einer fast kompatiblen API ist (zum Beispiel werden die folgenden zusätzlichen Schlüsselwörter unterstützt: panchor, extendfrac, extendrect).

Die Hauptunterschiede sind

  • Das Setzen der Ticks auf der Farbleiste erfolgt durch Aufrufen von colorbar.set_ticks anstelle von colorbar.cbar_axis.set_xticks oder colorbar.cbar_axis.set_yticks; der Parameter locator für colorbar() ist zugunsten seines Synonyms ticks veraltet (welches bereits zuvor existierte und konsistent mit matplotlib.colorbar ist).

  • Die lange Achse der Farbleiste wird je nach Ausrichtung mit colorbar.xaxis oder colorbar.yaxis angesprochen, anstatt mit colorbar.cbar_axis.

  • Der Standard-Ticker ist nicht mehr MaxNLocator(5), sondern ein _ColorbarAutoLocator.

  • Das Überzeichnen mehrerer Farbleisten übereinander in einer einzigen Achse (z. B. bei Verwendung des cax-Attributs von ImageGrid-Elementen) wird nicht unterstützt; wenn Sie sich zuvor darauf verlassen haben, dass die zweite Farbleiste über die erste gezeichnet wurde, können Sie cax.cla() aufrufen, um die Achse vor dem Zeichnen der zweiten Farbleiste zu löschen.

Während der Deprecationsperiode kann der mpl_toolkits.legacy_colorbar rcParam auf True gesetzt werden, um mpl_toolkits.axes_grid1.colorbar in mpl_toolkits.axes_grid1-Code mit einer Deprecation-Warnung (Standard) zu verwenden, oder auf False, um matplotlib.colorbar zu verwenden.

Das Übergeben einer pad-Größe von None (Standard) als Synonym für Null an die Methoden append_axes, new_horizontal und new_vertical von axes_grid1.axes_divider.AxesDivider ist veraltet. In einer zukünftigen Version bedeutet der Standardwert None "verwende rcParams["figure.subplot.wspace"] (Standard: 0.2) oder rcParams["figure.subplot.hspace"] (Standard: 0.2)" (abhängig von der Ausrichtung). Übergeben Sie explizit pad=0, um das alte Verhalten beizubehalten.

Axes3D#

mplot3d.axis3d.get_flip_min_max ist veraltet.

axes3d.unit_bbox ist veraltet (verwende stattdessen Bbox.unit).

axes3d.Axes3D.w_xaxis, .w_yaxis und .w_zaxis sind veraltet (verwende stattdessen .xaxis, .yaxis und .zaxis).

matplotlib.cm#

cm.revcmap ist veraltet. Verwende Colormap.reversed, um eine Colormap umzukehren.

cm.datad enthält keine Einträge mehr für umgekehrte Colormaps in ihrer "unwandelsform".

axisartist#

mpl_toolkits.axisartist.grid_finder.GridFinderBase ist veraltet (seine einzige Verwendung ist die Vererbung durch die GridFinder-Klasse, die nur mehr Standardwerte im Konstruktor bereitstellt und direkt die Transformationen setzt, so dass GridFinderBase's Methoden zu GridFinder verschoben wurden).

axisartist.axis_artist.BezierPath ist veraltet (verwende stattdessen patches.PathPatch, um beliebige Pfade zu zeichnen).

AxisArtist.line ist nun eine Instanz von patches.PathPatch anstelle einer Instanz von BezierPath.

Das Zurückgeben eines Faktors, der gleich None ist, von axisartist-Locators (die **nicht** dasselbe sind wie "Standard"-Tick-Locators) oder das Übergeben eines Faktors, der gleich None ist, an axisartist-Formatierer (die **nicht** dasselbe sind wie "Standard"-Tick-Formatierer) ist veraltet. Übergeben Sie stattdessen einen Faktor, der gleich 1 ist.

Für die Klasse mpl_toolkits.axisartist.axis_artist.AttributeCopier sind der Konstruktor und die Methode set_ref_artist sowie der Parameter default_value von get_attribute_from_ref_artist veraltet.

Die Verfallsmeldung des Konstruktors bedeutet, dass Klassen, die von AttributeCopier erben, seinen Konstruktor nicht mehr aufrufen sollten.

Locators#

Die ungenutzte Methode Locator.autoscale ist veraltet (verwende stattdessen die Achsenlimits für Locator.view_limits).

Animation#

Die folgenden Methoden und Attribute der Klasse MovieWriterRegistry sind veraltet: set_dirty, ensure_not_dirty, reset_available_writers, avail.

smart_bounds()#

Die Funktionalität "smart_bounds" ist veraltet. Dies umfasst Axis.set_smart_bounds(), Axis.get_smart_bounds(), Spine.set_smart_bounds() und Spine.get_smart_bounds().

boxplot()#

Das Setzen des Parameters whis von Axes.boxplot und cbook.boxplot_stats auf "range" zur Bedeutung "der gesamte Datenbereich" ist veraltet; setzen Sie ihn auf (0, 100) (was als Perzentile interpretiert wird), um denselben Effekt zu erzielen.

fill_between()#

Das Übergeben von Skalaren an den Parameter where in fill_between() und fill_betweenx() ist veraltet. Obwohl die Dokumentation bereits besagt, dass where die gleiche Größe wie x (oder y) haben muss, wurden Skalare akzeptiert und auf die Größe von x erweitert. Nicht übereinstimmende Größen werden in Zukunft einen ValueError auslösen.

scatter()#

Das Übergeben des Parameters verts an axes.Axes.scatter ist veraltet; verwende stattdessen den Parameter marker.

tight_layout()#

Der Parameter renderer für Figure.tight_layout ist veraltet; diese Methode verwendet nun immer die im Figure zwischengespeicherte Renderer-Instanz.

rcParams#

Die Funktion rcsetup.validate_animation_writer_path ist veraltet.

Das Setzen von rcParams["savefig.format"] (Standard: 'png') auf "auto" ist veraltet; verwende stattdessen sein Synonym "png".

Das Setzen von rcParams["text.hinting"] (Standard: 'force_autohint') auf True oder False ist veraltet; verwende stattdessen seine Synonyme "auto" oder "none".

rcsetup.update_savefig_format ist veraltet.

rcsetup.validate_path_exists ist veraltet (verwende stattdessen os.path.exists, um zu überprüfen, ob ein Pfad existiert).

rcsetup.ValidateInterval ist veraltet.

Dates#

dates.mx2num ist veraltet.

TK#

NavigationToolbar2Tk.set_active ist veraltet, da sie keine (beobachtbare) Auswirkung hat.

WX#

FigureFrameWx.statusbar und NavigationToolbar2Wx.statbar sind veraltet. Die Statusleiste kann durch Aufruf von Standard-wx-Methoden abgerufen werden (frame.GetStatusBar() und toolbar.GetTopLevelParent().GetStatusBar()).

backend_wx.ConfigureSubplotsWx.configure_subplots und backend_wx.ConfigureSubplotsWx.get_canvas sind veraltet.

PGF#

backend_pgf.repl_escapetext und backend_pgf.repl_mathdefault sind veraltet.

RendererPgf.latexManager ist veraltet.

FigureCanvas#

FigureCanvasBase.draw_cursor (die nie etwas getan hat und in keinem Backend überschrieben wurde) ist veraltet.

FigureCanvasMac.invalidate ist zugunsten seines Synonyms FigureCanvasMac.draw_idle veraltet.

Der Parameter dryrun für die verschiedenen Methoden FigureCanvasFoo.print_foo ist veraltet.

QuiverKey doc#

quiver.QuiverKey.quiverkey_doc ist veraltet; verwende stattdessen quiver.QuiverKey.__init__.__doc__.

matplotlib.mlab#

mlab.apply_window und mlab.stride_repeat sind veraltet.

Fonts#

font_manager.JSONEncoder ist veraltet. Verwende font_manager.json_dump, um eine Instanz von FontManager zu speichern.

font_manager.createFontList ist veraltet. font_manager.FontManager.addfont ist jetzt verfügbar, um eine Schriftart an einem bestimmten Pfad zu registrieren.

Die Methoden as_str, as_rgba_str, as_array, get_width und get_height von matplotlib.ft2font.FT2Image sind veraltet. Konvertiere das FT2Image vor der Verarbeitung in ein NumPy-Array mit np.asarray.

Farben#

Die Funktion matplotlib.colors.makeMappingArray wird nicht mehr als Teil der öffentlichen API betrachtet. Daher ist sie veraltet.

Die Verwendung einer Zeichenkette aus ein-Zeichen-Farben als Farbsequenz (z. B. "rgb") ist veraltet. Verwende stattdessen eine explizite Liste.

Skalen#

Das Übergeben von nicht unterstützten Schlüsselwortargumenten an ScaleBase und seine Unterklassen LinearScale und SymmetricalLogScale ist veraltet und wird in 3.3 einen TypeError auslösen.

Wenn zusätzliche Schlüsselwortargumente an LogScale übergeben werden, wird nun stattdessen ein TypeError anstelle eines ValueError ausgelöst.

Testing#

Das Modul matplotlib.testing.disable_internet ist veraltet. Verwende stattdessen z. B. pytest-remotedata.

Die Unterstützung in matplotlib.testing für Nose-basierte Tests ist veraltet (es wird eine Verfallsmeldung ausgegeben, wenn z. B. die Dekoratoren aus diesem Modul verwendet werden, während sowohl 1) die Conftests von Matplotlib nicht aufgerufen wurden als auch 2) Nose in sys.modules vorhanden ist).

testing.is_called_from_pytest ist veraltet.

Zwingen Sie während der Deprecationsperiode die Generierung von Nose-Basis-Tests, indem Sie zuerst Nose importieren.

Der Parameter switch_backend_warn für matplotlib.test hat keine Auswirkung und ist veraltet.

testing.jpl_units.UnitDbl.UnitDbl.checkUnits ist veraltet.

DivergingNorm umbenannt in TwoSlopeNorm#

DivergingNorm war ein irreführender Name; obwohl die Norm mit der Idee entwickelt wurde, dass sie wahrscheinlich mit divergierenden Colormaps verwendet werden würde, beschreibt oder evoziert das Wort 'diverging' nicht die Abbildungsfunktion der Norm. Da diese Funktion monoton, kontinuierlich und stückweise linear mit zwei Segmenten ist, wurde die Norm in TwoSlopeNorm umbenannt.

Misc#

matplotlib.get_home ist veraltet (verwende stattdessen z. B. os.path.expanduser("~")).

matplotlib.compare_versions ist veraltet (verwende stattdessen den Vergleich von distutils.version.LooseVersions).

matplotlib.checkdep_ps_distiller ist veraltet.

matplotlib.figure.AxesStack wird als private API betrachtet und wird in zukünftigen Versionen aus der öffentlichen API entfernt.

BboxBase.is_unit ist veraltet (prüfe bei Bedarf die Bbox-Grenzen).

Affine2DBase.matrix_from_values(...) ist veraltet. Verwende stattdessen z. B. Affine2D.from_values(...).get_matrix().

style.core.is_style_file und style.core.iter_style_files sind veraltet.

Die datapath rcParam#

Verwende stattdessen get_data_path. (Die rcParam ist veraltet, da sie von einem Endbenutzer nicht sinnvoll gesetzt werden kann.) Die rcParam hatte ab 3.2.0 keine Auswirkung, wurde aber erst in 3.2.1 veraltet. In 3.2.1+ wird 'datapath' in einer matplotlibrc-Datei respektiert, aber dieses Verhalten wird in 3.3 entfernt.

Entfernungen#

Das Modul matplotlib.testing.determinism, das keine öffentliche API exponiert, wurde gelöscht.

Die folgenden API-Elemente wurden entfernt

  • backend_gtk3.PIXELS_PER_INCH

  • backend_pgf.re_escapetext, backend_pgf.re_mathdefault.

  • die Module matplotlib.backends.tkagg, matplotlib.backends.windowing, matplotlib.backends.wx_compat und matplotlib.compat.subprocess

  • RcParams.msg_depr, RcParams.msg_depr_ignore, RcParams.msg_depr_set, RcParams.msg_obsolete, RcParams.msg_backend_obsolete

  • afm.parse_afm (verwende stattdessen afm.AFM)

  • axes.Axes.mouseover_set

  • backend_cairo.ArrayWrapper, backend_cairo.RendererCairo.convert_path

  • backend_gtk3.FileChooserDialog.sorted_filetypes (verwende stattdessen sorted(self.filetypes.items()))

  • backend_pgf.get_texcommand

  • backend_pdf.PdfFile.texFontMap

  • backend_ps.get_bbox

  • backend_qt.FigureCanvasQT5.keyAutoRepeat (verwende stattdessen event.guiEvent.isAutoRepeat), backend_qt.error_msg_qt, backend_qt.exception_handler

  • backend_wx.FigureCanvasWx.macros

  • backends.pylab_setup

  • cbook.Bunch (verwende stattdessen types.SimpleNamespace), cbook.Locked, cbook.unicode_safe, cbook.is_numlike (verwende stattdessen isinstance(..., numbers.Number)), cbook.mkdirs (verwende stattdessen os.makedirs(..., exist_ok=True)), cbook.GetRealpathAndStat (verwende stattdessen cbook.get_realpath_and_stat), cbook.listFiles

  • container.Container.set_remove_method

  • contour.ContourLabeler.cl, contour.ContourLabeler.cl_xy, contour.ContourLabeler.cl_cvalues (verwende stattdessen labelTexts, labelXYs, labelCValues)

  • dates.DateFormatter.strftime, dates.DateFormatter.strftime_pre_1900

  • font_manager.TempCache, font_manager.FontManager.ttffiles, font_manager.FontManager.afmfiles

  • mathtext.unichr_safe (verwende stattdessen chr)

  • patches.YAArrow (verwende stattdessen patches.FancyArrowPatch)

  • sphinxext.plot_directive.remove_coding

  • table.Table.get_child_artists

  • testing.compare.compare_float, testing.decorators.CleanupTest, testing.decorators.ImageComparisonTest, testing.decorators.skip_if_command_unavailable, Unterstützung für Nose-basierte Tests

  • text.Annotation.arrow (verwende stattdessen text.Annotation.arrow_patch)

  • textpath.TextToPath.tex_font_map

  • ticker.Base, ticker.closeto, ticker.nearest_long

  • axes_grid1.axes_divider.LocatableAxesBase, axes_grid1.axes_divider.locatable_axes_factory, axes_grid1.axes_divider.Axes (verwende stattdessen axes_grid1.mpl_axes.Axes), axes_grid1.axes_divider.LocatableAxes (verwende stattdessen axes_grid1.mpl_axes.Axes)

  • axisartist.axes_divider.Axes, axisartist.axes_divider.LocatableAxes (verwende stattdessen axisartist.axislines.Axes)

  • das Schlüsselwortargument normed für hist (verwende stattdessen density)

  • das Übergeben von (verts, 0) oder (..., 3) beim Festlegen eines Markers, um einen Pfad oder einen Kreis anzugeben (verwende stattdessen verts oder "o", bzw.)

  • die rcParam examples.directory

Die folgenden Mitglieder von matplotlib.backends.backend_pdf.PdfFile wurden entfernt

  • nextObject

  • nextFont

  • nextAlphaState

  • nextHatch

  • nextImage

  • alphaStateObject

Das Attribut required_interactive_framework von Backend-Modulen, das in Matplotlib 3.0 eingeführt wurde, wurde in die Klasse FigureCanvas verschoben, um es von Drittanbieter-Canvas-Unterklassen erben zu lassen und um leichter zu erkennen zu machen, welches interaktive Framework von einer Canvas-Klasse benötigt wird.

backend_qt4.FigureCanvasQT5, welches ein Alias für backend_qt5.FigureCanvasQT ist (existiert aber nur unter diesem Namen in backend_qt4), wurde entfernt.

Entwicklungsänderungen#

Windows-Build#

Zuvor würde das Build-Skript beim Erstellen der Erweiterung matplotlib._png "png" und "z" zum Attribut .libraries der Erweiterungen hinzufügen (wenn pkg-config-Informationen nicht verfügbar sind, was insbesondere unter Windows der Fall ist).

Insbesondere bedeutet dies, dass der Windows-Build nach Dateien namens png.lib und z.lib suchen würde; aber weder libpng upstream noch zlib upstream stellen diese Dateien standardmäßig bereit. (Unter Linux würde nach libpng.so und libz.so gesucht werden, was tatsächlich Standardnamen sind.)

Stattdessen suchen wir unter Windows nach libpng16.lib und zlib.lib, was die Upstream-Namen für die Shared Libraries sind (ab libpng 1.6.x).

Für einen statisch gelinkten Build sind die Upstream-Namen libpng16_static.lib und zlibstatic.lib; man muss sie immer noch manuell umbenennen, wenn ein solcher Build gewünscht wird.

Packaging DLLs#

Zuvor war es möglich, Windows-DLLs in das Matplotlib-Wheel (oder sdist) zu packen, indem man sie in den Quellbaum kopierte und den Eintrag package_data.dlls in setup.cfg setzte.

In den Quellbaum kopierte DLLs werden nun immer gepackt; der Eintrag package_data.dlls hat keine Wirkung mehr. Wenn Sie die DLLs nicht einschließen möchten, kopieren Sie sie nicht in den Quellbaum.