API-Änderungen für 3.0.0#
Unterstützung für Python 2 eingestellt#
Matplotlib 3 unterstützt nur Python 3.5 und höher.
Änderungen an der Backend-Ladung#
Fehler beim Laden von Backend-Modulen (macosx auf Nicht-Framework-Builds und gtk3 im Headless-Betrieb) lösen nun ImportError aus (statt RuntimeError bzw. TypeError).
Drittanbieter-Backends, die sich in ein interaktives Framework integrieren, werden nun ermutigt, den globalen Wert required_interactive_framework auf einen der folgenden Werte zu setzen: "qt5", "qt4", "gtk3", "wx", "tk" oder "macosx". Diese Information wird verwendet, um zu bestimmen, ob es möglich ist, von einem Backend zu einem anderen zu wechseln (insbesondere, ob sie dasselbe interaktive Framework verwenden).
Axes.hist2d verwendet nun pcolormesh anstelle von pcolorfast#
Axes.hist2d verwendet nun pcolormesh anstelle von pcolorfast, was die Handhabung von logarithmischen Achsen verbessert. Beachten Sie, dass das zurückgegebene *Bild* nun vom Typ QuadMesh anstelle von AxesImage ist.
matplotlib.axes.Axes.get_tightbbox umfasst nun alle Künstler#
Für Matplotlib 3.0 werden nun *alle* Künstler im von matplotlib.axes.Axes.get_tightbbox zurückgegebenen Bounding-Box eingeschlossen.
matplotlib.axes.Axes.get_tightbbox fügt ein neues Schlüsselwortargument bbox_extra_artists hinzu, um die Liste der Künstler auf der Achse, die in die Berechnung der engen Bounding-Box einbezogen werden sollen, manuell anzugeben.
Layout-Werkzeuge wie Figure.tight_layout, constrained_layout und fig.savefig('fname.png', bbox_inches="tight") verwenden matplotlib.axes.Axes.get_tightbbox, um die Grenzen jeder Achse in einer Abbildung zu bestimmen und den Abstand zwischen den Achsen anzupassen.
In Matplotlib 2.2 begann get_tightbbox, Legenden auf den Achsen einzubeziehen, schloss aber noch einige andere Künstler aus, wie z. B. Text, der eine Achse überlappen könnte. Dies wurde erweitert, um *alle* Künstler einzuschließen.
Dieses neue Standardverhalten kann auf drei Arten überschrieben werden
Machen Sie den auszuschließenden Künstler zu einem Kind der Abbildung und nicht der Achse. Rufen Sie z. B.
fig.legend()anstelle vonax.legend()auf (vielleicht unter Verwendung vonget_legend_handles_labels, um Handles und Labels von der übergeordneten Achse zu sammeln).Wenn der Künstler ein Kind der Achse ist, setzen Sie die Künstlereigenschaft
artist.set_in_layout(False).Geben Sie manuell eine Liste von Künstlern im neuen Schlüsselwortargument
bbox_extra_artistsan.
Text.set_text mit dem Zeichenkettenargument None setzt die Zeichenkette auf leer#
Text.set_text würde beim Übergeben eines Zeichenkettenwerts von None die Zeichenkette auf "None" setzen, so dass nachfolgende Aufrufe von Text.get_text die mehrdeutige Zeichenkette "None" zurückgeben würden.
Diese Änderung setzt Textobjekte, denen None übergeben wurde, auf leere Zeichenketten, so dass Text.get_text eine leere Zeichenkette zurückgibt.
Axes3D.get_xlim, get_ylim und get_zlim geben nun ein Tupel zurück#
Sie gaben zuvor ein Array zurück. Die Rückgabe eines Tupels ist konsistent mit dem Verhalten für 2D-Achsen.
font_manager.list_fonts folgt nun der Fallback-Semantik der Plattform#
d. h. es verhält sich unter Windows nur case-insensitiv.
bar / barh akzeptiert left / bottom nicht mehr als erstes benanntes Argument#
Diese Argumente wurden in 2.0 in x / y umbenannt, folgend der Änderung der Standardausrichtung von edge zu center.
Unterschiedliche Ausnahmetypen für undokumentierte Optionen#
Die Übergabe von
style='comma'anticklabel_format()wurde nie unterstützt. Sie löst nunValueErroraus, wie alle anderen nicht unterstützten Stile, anstattNotImplementedError.Das Übergeben der undokumentierten Argumente
xminoderxmaxanset_xlim()überschrieb stillschweigend die Argumenteleftundright.set_ylim()und die 3D-Äquivalente (z. B.set_zlim) hatten ein entsprechendes Problem. EinTypeErrorwird ausgelöst, wenn sie frühere Grenzargumente überschreiben würden. In 3.0 wurden diese Schlüsselwortargumente als veraltet gekennzeichnet, aber in 3.1 wurde die Verfallszeit aufgehoben.
Verbesserte Aufrufsignatur für Axes.margins#
Axes.margins und Axes3D.margins akzeptieren keine beliebigen Schlüsselwortargumente mehr. TypeError wird daher ausgelöst, wenn unbekannte Schlüsselwortargumente übergeben werden; zuvor wurden sie stillschweigend ignoriert.
Wenn zu viele Positionsargumente übergeben werden, wird TypeError anstelle von ValueError ausgelöst, zur Konsistenz mit anderen Verstößen gegen die Aufrufsignatur.
Axes3D.margins löst nun TypeError aus anstatt eine Verwarnung zu emittieren, wenn nur zwei Positionsargumente übergeben werden. Um nur x und y Ränder anzugeben, verwenden Sie Schlüsselwortargumente.
Explizite Argumente anstelle von *args, **kwargs#
PEP 3102 beschreibt schlüsselwortbasierte Argumente, die es Matplotlib ermöglichen, explizite Aufrufsignaturen bereitzustellen - wo wir zuvor *args, **kwargs und kwargs.pop verwendeten, können wir nun benannte Argumente verfügbar machen. An einigen Stellen wurden unbekannte Schlüsselwortargumente zuvor ignoriert, lösen aber nun TypeError aus, da **kwargs entfernt wurde.
matplotlib.axes.Axes.stem()akzeptiert keine unbekannten Schlüsselwortargumente mehr und löstTypeErroraus, anstatt eine Verwarnung zu emittieren.matplotlib.axes.Axes.stem()löst nun TypeError aus, wenn unhandhabte Positionsargumente übergeben werden. Wenn zwei oder mehr Argumente übergeben werden (d. h. X, Y, [linefmt], ...) und Y nicht in ein Array umgewandelt werden kann, wird ein Fehler ausgelöst, anstatt X als Y und Y als linefmt zu behandeln.mpl_toolkits.axes_grid1.axes_divider.SubplotDividerlöstTypeErroranstelle vonExceptionaus, wenn unbekannte Schlüsselwortargumente übergeben werden.
Bereinigungsdekore und Testklassen zerstören den Warnungsfilter beim Beenden nicht mehr#
Die Dekore und Klassen in matplotlib.testing.decorators zerstören den Warnungsfilter beim Beenden nicht mehr. Stattdessen stellen sie den Warnungsfilter wieder her, der vor dem Testlauf existierte, unter Verwendung von warnings.catch_warnings.
Nicht-interaktive FigureManager-Klassen sind nun Aliase von FigureManagerBase#
Die Klassen FigureManagerPdf, FigureManagerPS und FigureManagerSVG, die zuvor leere Unterklassen von FigureManagerBase waren (d. h. kein Attribut oder Methode hinzufügend oder überschreibend), sind nun direkte Aliase für FigureManagerBase.
Änderung der Ausgabe von image.thumbnail#
Wenn image.thumbnail mit preview=False aufgerufen wurde, gab es zuvor eine Abbildung zurück, deren Canvas-Klasse entsprechend der Ausgabe-Dateierweiterung eingestellt war. Es gibt nun eine Abbildung zurück, deren Canvas-Klasse die Basis FigureCanvasBase ist (und verlässt sich auf FigureCanvasBase.print_figure), um den Canvas-Wechsel korrekt zu handhaben).
Als Nebeneffekt dieser Änderung unterstützt image.thumbnail nun auch die Ausgabe .ps, .eps und .svgz.
FuncAnimation zeichnet nun Künstler gemäß ihrer zorder beim Blitting#
FuncAnimation zeichnet nun die von der Benutzerfunktion zurückgegebenen Künstler gemäß ihrer zorder beim Blitting, anstatt die Reihenfolge zu verwenden, in der sie übergeben werden. Beachten Sie jedoch, dass nur die zorder der übergebenen Künstler berücksichtigt wird, da sie über allen vorhandenen Künstlern gezeichnet werden (siehe #11369).
Verbesserungen bei der automatischen Skalierung von Konturfarben#
Die Auswahl der Konturlevel ist nun für Kontur und Konturf gleich; zuvor wurden für Konturen Level außerhalb des Datenbereichs gelöscht. (Ausnahme: Wenn keine Konturlevel im Datenbereich gefunden werden, wird das `levels`-Attribut durch eine Liste ersetzt, die nur das Minimum des Datenbereichs enthält.)
Wenn Kontur mit als Zielzahl spezifizierten Leveln und dem `extend`-Schlüsselwortargument aufgerufen wird, werden die Level nun so gewählt, dass typischerweise Daten in den erweiterten Bereich fallen.
Wenn Kontur mit einem LogNorm oder einem LogLocator aufgerufen wird, werden die Farben nun mit dem geometrischen Mittel anstelle des arithmetischen Mittels der Konturlevel ausgewählt.
Letzte Zeile und Spalte von Streamplot behoben#
Ein Fehler wurde behoben, bei dem die letzte Zeile und Spalte von Daten in streamplot verworfen wurden.
Standard-Schlüsselwortargument interval_multiples von AutoDateLocator zu True geändert#
Der Standardwert des Tick-Locators für Daten, das Schlüsselwortargument interval_multiples von dates.AutoDateLocator, wurde auf False gesetzt, was in vielen Fällen zu nicht so schön aussehenden automatischen Ticks führte. Das viel schönere interval_multiples=True ist nun der Standard. Siehe unten, um das alte Verhalten wiederherzustellen.
Axes.get_position gibt nun die tatsächliche Position zurück, wenn sich das Seitenverhältnis geändert hat#
Axes.get_position gab früher die ursprüngliche Position zurück, es sei denn, es wurde eine Zeichnung ausgelöst oder Axes.apply_aspect wurde aufgerufen, selbst wenn das Schlüsselwortargument *original* auf False gesetzt war. Nun wird Axes.apply_aspect aufgerufen, so dass `ax.get_position()` die neue modifizierte Position zurückgibt. Um das alte Verhalten zu erhalten, verwenden Sie ax.get_position(original=True).
Die Ticks für die Farbleiste passen sich nun der Größe der Farbleiste an#
Farbleisten-Ticks passen sich nun der Größe der Farbleiste an, wenn die Farbleiste aus einem Mappable erstellt wird, das keine Kontur ist oder keine BoundaryNorm hat, oder wenn keine Grenzen angegeben sind. Wenn Grenzen usw. angegeben sind, behält die Farbleiste das ursprüngliche Verhalten bei.
Farbleiste für logarithmisch skalierte Hexbins#
Bei Verwendung von hexbin und Darstellung mit einer logarithmischen Farbskala sind die Farbleisten-Ticks nun korrekt logarithmisch skaliert. Zuvor waren die Tick-Werte linear skaliert log(Anzahl der Zählungen).
PGF-Backend macht schwarzen Text nun explizit schwarz#
Das bisherige Verhalten des PGF-Backends war, dass schwarzer Text tatsächlich die Standardfarbe dessen war, was die PGF-Datei rendert (was natürlich meist schwarz war). Das neue Verhalten ist, dass schwarzer Text schwarz ist, unabhängig von der Standardfarbe. Dies bedeutet jedoch, dass es keine Möglichkeit gibt, auf die Standardfarbe des Renderers zurückzufallen.
Blockierte rcParams werden nicht mehr von rcdefaults, rc_file_defaults, rc_file aktualisiert#
Die rc-Modifikatorfunktionen rcdefaults, rc_file_defaults und rc_file ignorieren nun rcParams im Set matplotlib.style.core.STYLE_BLACKLIST. Insbesondere verhindert dies, dass die rcParams backend und interactive von diesen Funktionen falsch modifiziert werden.
CallbackRegistry speichert nun Rückrufe mit stdlib's weakref.WeakMethods#
Insbesondere impliziert dies, dass CallbackRegistry.callbacks[signal] nun eine Zuordnung von Callback-IDs zu weakref.WeakMethods ist (d. h. sie müssen zuerst ohne Argumente aufgerufen werden, um die Methode selbst abzurufen).
Änderungen bezüglich des rcParams text.latex.unicode#
Das rcParam ist nun standardmäßig True und ist veraltet (d. h. in zukünftigen Versionen von Matplotlib wird Unicode-Eingabe immer unterstützt).
Darüber hinaus verwendet die zugrundeliegende Implementierung nun \usepackage[utf8]{inputenc} anstelle von \usepackage{ucs}\usepackage[utf8x]{inputenc}.
Rückgabetyp von ArtistInspector.get_aliases geändert#
ArtistInspector.get_aliases gab zuvor die Menge der Aliase als {fullname: {alias1: None, alias2: None, ...}} zurück. Die Dict-zu-None-Zuordnung wurde verwendet, um eine Menge in früheren Versionen von Python zu simulieren. Sie wurde nun durch eine Menge ersetzt, d. h. {fullname: {alias1, alias2, ...}}.
Dieser Wert wird auch in ArtistInspector.aliasd gespeichert, das sich ebenfalls geändert hat.
pytz als Abhängigkeit entfernt#
Da dateutil und pytz beide Zeitzonen bereitstellen und Matplotlib bereits von dateutil abhängt, wird Matplotlib nun intern dateutil-Zeitzonen verwenden und die redundante Abhängigkeit von pytz fallen lassen. Während dateutil-Zeitzonen bevorzugt werden (und derzeit in der Python-Dokumentation empfohlen werden), wird die explizite Verwendung von pytz-Zonen weiterhin unterstützt.
Deprecations#
Module#
Die folgenden Module sind veraltet
matplotlib.compat.subprocess. Dies war ein Workaround für Python 2, aber alle Funktionalitäten finden sich nun in der Python 3-Standardbibliotheksubprocess.matplotlib.backends.wx_compat. Python 3 ist nur mit wxPython 4 kompatibel, daher kann die Unterstützung für wxPython 3 oder früher eingestellt werden.
Klassen, Methoden, Funktionen und Attribute#
Die folgenden Klassen, Methoden, Funktionen und Attribute sind veraltet
RcParams.msg_depr,RcParams.msg_depr_ignore,RcParams.msg_depr_set,RcParams.msg_obsolete,RcParams.msg_backend_obsoleteafm.parse_afmbackend_pdf.PdfFile.texFontMapbackend_pgf.get_texcommandbackend_ps.get_bboxbackend_qt5.FigureCanvasQT.keyAutoRepeat(prüfen Sie direktevent.guiEvent.isAutoRepeat()im Event-Handler, um zu entscheiden, ob autorepeat-Tastendrücke behandelt werden sollen).backend_qt5.error_msg_qt,backend_qt5.exception_handlerbackend_wx.FigureCanvasWx.macrosbackends.pylab_setupcbook.GetRealpathAndStat,cbook.Lockedcbook.is_numlike(verwenden Sie stattdessenisinstance(..., numbers.Number)),cbook.listFiles,cbook.unicode_safecontainer.Container.set_remove_method,contour.ContourLabeler.cl,.cl_xyund.cl_cvaluesdates.DateFormatter.strftime_pre_1900,dates.DateFormatter.strftimefont_manager.TempCacheimage._ImageBase.iterpnames, verwenden Sie stattdessen dieinterpolation_namesEigenschaft. (Dies betrifft Klassen, die von_ImageBaseerben, einschließlichFigureImage,BboxImageundAxesImage)mathtext.unichr_safe(verwenden Sie stattdessenchr)patches.Polygon.xytable.Table.get_child_artists(verwenden Sie stattdessenget_children)testing.compare.ImageComparisonTest,testing.compare.compare_floattesting.decorators.CleanupTest,testing.decorators.skip_if_command_unavailableFigureCanvasQT.keyAutoRepeat(prüfen Sie direktevent.guiEvent.isAutoRepeat()im Event-Handler, um zu entscheiden, ob automatisch wiederholte Tastendrücke behandelt werden sollen)FigureCanvasWx.macros_ImageBase.iterpnames, verwenden Sie stattdessen dieinterpolation_namesEigenschaft. (Dies betrifft Klassen, die von_ImageBaseerben, einschließlichFigureImage,BboxImageundAxesImage)patches.Polygon.xytexmanager.dvipng_hack_alphatext.Annotation.arrowLegend.draggable(), zugunsten vonLegend.set_draggable()(
Legend.draggablekönnte in zukünftigen Versionen als Eigenschaft wieder eingeführt werden)
textpath.TextToPath.tex_font_mapmatplotlib.cbook.deprecation.mplDeprecationwird in zukünftigen Versionen entfernt. Es ist nur ein Alias fürmatplotlib.cbook.deprecation.MatplotlibDeprecationWarning. Bitte verwenden Sie stattdessen direktmatplotlib.cbook.MatplotlibDeprecationWarning, falls erforderlich.Die Klasse
matplotlib.cbook.Bunchist veraltet. Verwenden Sie stattdessentypes.SimpleNamespaceaus der Standardbibliothek, die die gleiche Funktionalität bietet.Axes.mouseover_setist jetzt ein frozenset und veraltet. Bearbeiten Sie stattdessen direkt das Attribut.mouseoverdes Artists, um dessen Mausover-Status zu ändern.
Die folgenden Schlüsselwortargumente sind veraltet
Übergabe von
vertsanAxes.scatter(verwenden Sie stattdessenmarker)Übergabe von
obj_typeancbook.deprecated
Die folgenden Aufrufsignaturen sind veraltet
Übergabe eines
wx.EvtHandlerals erstes Argument anbackend_wx.TimerWx
rcParams#
Die folgenden rcParams sind veraltet
examples.directory(verwenden Sie stattdessendatapath)pgf.debug(das pgf-Backend verwendet Logging)text.latex.unicode(immer True)
Markerstile#
Die Verwendung von
(n, 3)als Markerstil zur Angabe eines Kreis-Markers ist veraltet. Verwenden Sie stattdessen"o".Die Verwendung von
([(x0, y0), (x1, y1), ...], 0)als Markerstil zur Angabe eines benutzerdefinierten Markerpfads ist veraltet. Verwenden Sie stattdessen[(x0, y0), (x1, y1), ...].
Veraltung von LocatableAxes in Toolkits#
Die Klassen LocatableAxes in Toolkits sind veraltet. Die Basisklassen Axes bieten allen Unterklassen die gleiche Funktionalität, sodass diese Mixins nicht mehr notwendig sind. Verwandte Funktionen sind ebenfalls veraltet. Insbesondere
mpl_toolkits.axes_grid1.axes_divider.LocatableAxesBase: keine spezifische Ersetzung; verwenden Sie stattdessen direkt eine beliebige andere Klasse, die vonAxesabgeleitet ist.mpl_toolkits.axes_grid1.axes_divider.locatable_axes_factory: keine spezifische Ersetzung; verwenden Sie stattdessen direkt eine beliebige andere Klasse, die vonAxesabgeleitet ist.mpl_toolkits.axes_grid1.axes_divider.Axes: verwenden Sie direktmpl_toolkits.axes_grid1.mpl_axes.Axes.mpl_toolkits.axes_grid1.axes_divider.LocatableAxes: verwenden Sie direktmpl_toolkits.axes_grid1.mpl_axes.Axes.mpl_toolkits.axisartist.axes_divider.Axes: verwenden Sie direktmpl_toolkits.axisartist.axislines.Axes.mpl_toolkits.axisartist.axes_divider.LocatableAxes: verwenden Sie direktmpl_toolkits.axisartist.axislines.Axes.
Entfernungen#
Hold-Mechanismus#
Das Setzen oder Aufheben von hold (in Version 2.0 veraltet) wurde nun vollständig entfernt. Matplotlib verhält sich jetzt immer so, als ob hold=True gesetzt wäre. Um einen Axes zu löschen, können Sie manuell cla() verwenden, oder um eine gesamte Figure zu löschen, verwenden Sie clear().
Entfernung veralteter Backends#
Veraltete Backends wurden entfernt
GTKAgg
GTKCairo
GTK
GDK
Veraltete APIs#
Die folgenden veralteten API-Elemente wurden entfernt
Die veralteten Methoden
knownfailureifundremove_textwurden ausmatplotlib.testing.decoratorsentfernt.Der gesamte Inhalt von
testing.noseclasseswurde ebenfalls entfernt.matplotlib.checkdep_tex,matplotlib.checkdep_xmllintbackend_bases.IdleEventcbook.converter,cbook.tostr,cbook.todatetime,cbook.todate,cbook.tofloat,cbook.toint,cbook.unique,cbook.is_string_like,cbook.is_sequence_of_strings,cbook.is_scalar,cbook.soundex,cbook.dict_delall,cbook.get_split_ind,cbook.wrap,cbook.get_recursive_filelist,cbook.pieces,cbook.exception_to_str,cbook.allequal,cbook.alltrue,cbook.onetrue,cbook.allpairs,cbook.finddir,cbook.reverse_dict,cbook.restrict_dict,cbook.issubclass_safe,cbook.recursive_remove,cbook.unmasked_index_ranges,cbook.Null,cbook.RingBuffer,cbook.Sorter,cbook.Xlator,font_manager.weight_as_number,font_manager.ttfdict_to_fnamespyplot.colors,pyplot.spectralrcsetup.validate_negative_linestyle,rcsetup.validate_negative_linestyle_legacy,testing.compare.verifiers,testing.compare.verifytesting.decorators.knownfailureif,testing.decorators.ImageComparisonTest.remove_texttests.assert_str_equal,tests.test_tinypages.file_sametexmanager.dvipng_hack_alpha,_AxesBase.axesPatch,_AxesBase.set_color_cycle,_AxesBase.get_cursor_props,_AxesBase.set_cursor_props_ImageBase.iterpnamesFigureCanvasBase.start_event_loop_default;FigureCanvasBase.stop_event_loop_default;Figure.figurePatch,FigureCanvasBase.dynamic_update,FigureCanvasBase.idle_event,FigureCanvasBase.get_linestyle,FigureCanvasBase.set_linestyleFigureCanvasQTAggBaseFigureCanvasQTAgg.blitboxFigureCanvasTk.show(Alternative:FigureCanvasTk.draw)FigureManagerTkAgg(Alternative:FigureManagerTk)NavigationToolbar2TkAgg(Alternative:NavigationToolbar2Tk)backend_wxagg.Toolbar(Alternative:backend_wxagg.NavigationToolbar2WxAgg)RendererAgg.debug()Übergabe von Nicht-Zahlen an
EngFormatter.format_engÜbergabe von
fracanPolarAxes.set_theta_gridsJegliche Erwähnung von Idle-Events
Die folgenden API-Elemente wurden entfernt
backend_cairo.HAS_CAIRO_CFFIsphinxext.sphinx_version
Proprietäre Sphinx-Direktiven#
Die Matplotlib-Dokumentation verwendete die proprietären Sphinx-Direktiven .. htmlonly:: und .. latexonly::. Diese wurden durch die Standard-Sphinx-Direktiven .. only:: html und .. only:: latex ersetzt. Diese Änderung hat keine Auswirkungen auf die Benutzer. Nur nachgeschaltete Paketbetreuer, die die proprietären Direktiven in ihren Dokumenten verwendet haben, müssen auf die Sphinx-Direktiven umsteigen.
lib/mpl_examples Symlink#
Der Symlink von lib/mpl_examples zu ../examples wurde entfernt. Dies wird nicht als importierbares Paket installiert und sollte keine Auswirkungen auf Endbenutzer haben, erfordert jedoch möglicherweise Anpassungen für nachgeschaltete Paketierer. Der Inhalt ist weiterhin im übergeordneten Beispiele-Verzeichnis verfügbar.