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

  1. Machen Sie den auszuschließenden Künstler zu einem Kind der Abbildung und nicht der Achse. Rufen Sie z. B. fig.legend() anstelle von ax.legend() auf (vielleicht unter Verwendung von get_legend_handles_labels, um Handles und Labels von der übergeordneten Achse zu sammeln).

  2. Wenn der Künstler ein Kind der Achse ist, setzen Sie die Künstlereigenschaft artist.set_in_layout(False).

  3. Geben Sie manuell eine Liste von Künstlern im neuen Schlüsselwortargument bbox_extra_artists an.

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' an ticklabel_format() wurde nie unterstützt. Sie löst nun ValueError aus, wie alle anderen nicht unterstützten Stile, anstatt NotImplementedError.

  • Das Übergeben der undokumentierten Argumente xmin oder xmax an set_xlim() überschrieb stillschweigend die Argumente left und right. set_ylim() und die 3D-Äquivalente (z. B. set_zlim) hatten ein entsprechendes Problem. Ein TypeError wird 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öst TypeError aus, 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.SubplotDivider löst TypeError anstelle von Exception aus, 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.

(Quellcode, 2x.png, png)

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-Standardbibliothek subprocess.

  • 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_obsolete

  • afm.parse_afm

  • backend_pdf.PdfFile.texFontMap

  • backend_pgf.get_texcommand

  • backend_ps.get_bbox

  • backend_qt5.FigureCanvasQT.keyAutoRepeat (prüfen Sie direkt event.guiEvent.isAutoRepeat() im Event-Handler, um zu entscheiden, ob autorepeat-Tastendrücke behandelt werden sollen).

  • backend_qt5.error_msg_qt, backend_qt5.exception_handler

  • backend_wx.FigureCanvasWx.macros

  • backends.pylab_setup

  • cbook.GetRealpathAndStat, cbook.Locked

  • cbook.is_numlike (verwenden Sie stattdessen isinstance(..., numbers.Number)), cbook.listFiles, cbook.unicode_safe

  • container.Container.set_remove_method,

  • contour.ContourLabeler.cl, .cl_xy und .cl_cvalues

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

  • font_manager.TempCache

  • image._ImageBase.iterpnames, verwenden Sie stattdessen die interpolation_names Eigenschaft. (Dies betrifft Klassen, die von _ImageBase erben, einschließlich FigureImage, BboxImage und AxesImage)

  • mathtext.unichr_safe (verwenden Sie stattdessen chr)

  • patches.Polygon.xy

  • table.Table.get_child_artists (verwenden Sie stattdessen get_children)

  • testing.compare.ImageComparisonTest, testing.compare.compare_float

  • testing.decorators.CleanupTest, testing.decorators.skip_if_command_unavailable

  • FigureCanvasQT.keyAutoRepeat (prüfen Sie direkt event.guiEvent.isAutoRepeat() im Event-Handler, um zu entscheiden, ob automatisch wiederholte Tastendrücke behandelt werden sollen)

  • FigureCanvasWx.macros

  • _ImageBase.iterpnames, verwenden Sie stattdessen die interpolation_names Eigenschaft. (Dies betrifft Klassen, die von _ImageBase erben, einschließlich FigureImage, BboxImage und AxesImage)

  • patches.Polygon.xy

  • texmanager.dvipng_hack_alpha

  • text.Annotation.arrow

  • Legend.draggable(), zugunsten von Legend.set_draggable()

    (Legend.draggable könnte in zukünftigen Versionen als Eigenschaft wieder eingeführt werden)

  • textpath.TextToPath.tex_font_map

  • matplotlib.cbook.deprecation.mplDeprecation wird in zukünftigen Versionen entfernt. Es ist nur ein Alias für matplotlib.cbook.deprecation.MatplotlibDeprecationWarning. Bitte verwenden Sie stattdessen direkt matplotlib.cbook.MatplotlibDeprecationWarning, falls erforderlich.

  • Die Klasse matplotlib.cbook.Bunch ist veraltet. Verwenden Sie stattdessen types.SimpleNamespace aus der Standardbibliothek, die die gleiche Funktionalität bietet.

  • Axes.mouseover_set ist jetzt ein frozenset und veraltet. Bearbeiten Sie stattdessen direkt das Attribut .mouseover des Artists, um dessen Mausover-Status zu ändern.

Die folgenden Schlüsselwortargumente sind veraltet

  • Übergabe von verts an Axes.scatter (verwenden Sie stattdessen marker)

  • Übergabe von obj_type an cbook.deprecated

Die folgenden Aufrufsignaturen sind veraltet

  • Übergabe eines wx.EvtHandler als erstes Argument an backend_wx.TimerWx

rcParams#

Die folgenden rcParams sind veraltet

  • examples.directory (verwenden Sie stattdessen datapath)

  • 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 von Axes abgeleitet ist.

  • mpl_toolkits.axes_grid1.axes_divider.locatable_axes_factory: keine spezifische Ersetzung; verwenden Sie stattdessen direkt eine beliebige andere Klasse, die von Axes abgeleitet ist.

  • mpl_toolkits.axes_grid1.axes_divider.Axes: verwenden Sie direkt mpl_toolkits.axes_grid1.mpl_axes.Axes.

  • mpl_toolkits.axes_grid1.axes_divider.LocatableAxes: verwenden Sie direkt mpl_toolkits.axes_grid1.mpl_axes.Axes.

  • mpl_toolkits.axisartist.axes_divider.Axes: verwenden Sie direkt mpl_toolkits.axisartist.axislines.Axes.

  • mpl_toolkits.axisartist.axes_divider.LocatableAxes: verwenden Sie direkt mpl_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 knownfailureif und remove_text wurden aus matplotlib.testing.decorators entfernt.

  • Der gesamte Inhalt von testing.noseclasses wurde ebenfalls entfernt.

  • matplotlib.checkdep_tex, matplotlib.checkdep_xmllint

  • backend_bases.IdleEvent

  • cbook.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_fnames

  • pyplot.colors, pyplot.spectral

  • rcsetup.validate_negative_linestyle, rcsetup.validate_negative_linestyle_legacy,

  • testing.compare.verifiers, testing.compare.verify

  • testing.decorators.knownfailureif, testing.decorators.ImageComparisonTest.remove_text

  • tests.assert_str_equal, tests.test_tinypages.file_same

  • texmanager.dvipng_hack_alpha,

  • _AxesBase.axesPatch, _AxesBase.set_color_cycle, _AxesBase.get_cursor_props, _AxesBase.set_cursor_props

  • _ImageBase.iterpnames

  • FigureCanvasBase.start_event_loop_default;

  • FigureCanvasBase.stop_event_loop_default;

  • Figure.figurePatch,

  • FigureCanvasBase.dynamic_update, FigureCanvasBase.idle_event, FigureCanvasBase.get_linestyle, FigureCanvasBase.set_linestyle

  • FigureCanvasQTAggBase

  • FigureCanvasQTAgg.blitbox

  • FigureCanvasTk.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 frac an PolarAxes.set_theta_grids

  • Jegliche Erwähnung von Idle-Events

Die folgenden API-Elemente wurden entfernt

  • backend_cairo.HAS_CAIRO_CFFI

  • sphinxext.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.