API-Änderungen für 3.10.0#

Verhaltensänderungen#

Das onselect-Argument für Selektor-Widgets ist optional geworden#

Das Argument onselect für EllipseSelector, LassoSelector, PolygonSelector und RectangleSelector ist nicht mehr erforderlich.

SVG-Ausgabe: verbesserte Reproduzierbarkeit#

Einige SVG-Format-Plots erzeugten bei jedem Rendern unterschiedliche Ausgaben, selbst bei einem statischen svg.hashsalt Wert.

Das Problem war ein nichtdeterministisches ID-Generierungsschema für Clip-Pfade; die Korrektur führt ein wiederholbares, monoton steigendes Ganzzahl-ID-Schema als Ersatz ein.

Vorausgesetzt, dass Plots selbst Clip-Pfade in deterministischer Reihenfolge hinzufügen, ermöglicht dies wiederholbare (auch reproduzierbare, deterministische) SVG-Ausgabe.

ft2font-Klassen sind nun final#

Die ft2font-Klassen ft2font.FT2Font und ft2font.FT2Image sind nun final und können nicht mehr von abgeleitet werden.

InsetIndicator Artist#

indicate_inset und indicate_inset_zoom geben nun eine Instanz von InsetIndicator zurück. Verwenden Sie die Eigenschaften rectangle und connectors dieses Artists, um auf die Objekte zuzugreifen, die zuvor direkt zurückgegeben wurden.

Standardwert für interpolation_stage von imshow wurde auf 'auto' geändert#

Der Parameter interpolation_stage von imshow hat einen neuen Standardwert 'auto'. Für Bilder, die weniger als dreifach vergrößert oder verkleinert werden, erfolgt die Bildinterpolation im 'rgba'-Raum. Für Bilder, die dreifach oder mehr vergrößert werden, erfolgt die Bildinterpolation im 'data'-Raum.

Der vorherige Standardwert war 'data', daher können sich verkleinerte Bilder mit dem neuen Standardwert geringfügig ändern. Der neue Standardwert vermeidet jedoch auch Gleitkommaartefakte an scharfen Grenzen in einer Farbkarte beim Verkleinern.

Das vorherige Verhalten kann durch Setzen des Parameters interpolation_stage oder von rcParams["image.interpolation_stage"] (Standard: 'auto') auf 'data' erreicht werden.

Standardwert für interpolation von imshow wurde auf 'auto' geändert#

Der Parameter interpolation von imshow hat einen neuen Standardwert 'auto', geändert von 'antialiased', zur Konsistenz mit interpolation_stage und da die Interpolation nur beim Verkleinern Kantenglättung bewirkt. Die Übergabe von 'antialiased' funktioniert weiterhin und verhält sich exakt wie 'auto', wird aber nicht mehr empfohlen.

Die Stile dark_background und fivethirtyeight setzen savefig.facecolor und savefig.edgecolor nicht mehr#

Bei Verwendung dieser Stile erben rcParams["savefig.facecolor"] (Standard: 'auto') und rcParams["savefig.edgecolor"] (Standard: 'auto') nun den globalen Standardwert "auto", was bedeutet, dass die tatsächlichen Abbildungsfarben verwendet werden. Zuvor wurden diese rcParams auf die gleichen Werte wie rcParams["figure.facecolor"] (Standard: 'white') und rcParams["figure.edgecolor"] (Standard: 'white') gesetzt, d.h. eine gespeicherte Abbildung würde immer die Theme-Farben verwenden, auch wenn der Benutzer sie manuell überschrieb; dies ist nicht mehr der Fall.

Diese Änderung sollte keine Auswirkungen auf Benutzer haben, die die Abbildungs-Vorder- und -Randfarben nicht manuell setzen.

Zorder-Option in QuiverKey hinzugefügt#

zorder kann als Schlüsselwortargument an QuiverKey übergeben werden. Zuvor hatte dieser Parameter keine Auswirkung, da der Z-Order fest codiert war.

Unterabbildungen#

Figure.subfigures werden nun in Zeilenreihenfolge hinzugefügt, um mit Figure.subplots konsistent zu sein. Der Rückgabewert von subfigures bleibt unverändert, aber die Reihenfolge von fig.subfigs ändert sich.

(Sub)Figure.get_figure#

... wird in Zukunft standardmäßig die direkte Elternabbildung zurückgeben, die eine SubFigure sein kann. Dies macht das Standardverhalten konsistent mit der Methode get_figure anderer Artists. Um das Verhalten zu steuern, verwenden Sie den neu eingeführten Parameter root.

transforms.AffineDeltaTransform aktualisiert sich korrekt bei Änderungen der Achsenlimits#

Vor dieser Änderung wurden Transform-Untergraphen mit AffineDeltaTransform nicht korrekt aktualisiert. Dieser PR stellt sicher, dass Änderungen am untergeordneten Transform korrekt weitergegeben werden.

Der Offset-String, der mit ConciseDateFormatter verbunden ist, wird nun invertiert, wenn die Achse invertiert ist#

Zuvor änderte sich der Offset-String, der mit ConciseDateFormatter verbunden ist, nicht, wenn die Achse invertiert wurde, sodass der Offset-String die Achse in der falschen Ausrichtung anzeigte. Wenn die Achse nun invertiert ist, ist der Offset-String korrekt ausgerichtet.

suptitle in komprimiertem Layout#

Das komprimierte Layout positioniert nun automatisch den suptitle knapp über der obersten Reihe von Achsen. Um diesen Titel an seiner vorherigen Position zu belassen, übergeben Sie entweder in_layout=False oder setzen Sie explizit y=0.98 im Aufruf von suptitle.

Veraltete Funktionen#

Positionsargumente in Plot-Funktionen#

Viele Plot-Funktionen werden zukünftig Positionsargumente auf die ersten wenigen Parameter beschränken. Alle weiteren Konfigurationsparameter müssen als Schlüsselwortargumente übergeben werden. Dies dient der Erzwingung besseren Codes und ermöglicht zukünftige Änderungen mit reduziertem Risiko, bestehenden Code zu brechen.

Änderung von Figure.number#

Das Ändern von Figure.number ist veraltet. Dieser Wert wird von pyplot zur Identifizierung von Abbildungen verwendet. Er muss mit dem internen Zustand von pyplot synchron bleiben und ist nicht zur Änderung durch den Benutzer bestimmt.

PdfFile.hatchPatterns#

... ist veraltet.

(Sub)Figure.set_figure#

... ist veraltet und wird zukünftig immer eine Ausnahme auslösen. Die Eltern- und Wurzelabbildungen einer (Sub)Figure werden bei der Instanziierung gesetzt und können nicht geändert werden.

Poly3DCollection.get_vector#

... ist veraltet ohne Ersatz.

Veraltetes register auf matplotlib.patches._Styles und seinen Unterklassen#

Diese Klassenmethode wird intern nie verwendet. Aufgrund der internen Prüfung in der Methode akzeptiert sie nur Unterklassen einer privaten Basisklasse, die in der Host-Klasse eingebettet ist, was unwahrscheinlich macht, dass sie extern verwendet wurde.

matplotlib.validate_backend#

... ist veraltet. Bitte verwenden Sie stattdessen matplotlib.rcsetup.validate_backend.

matplotlib.sanitize_sequence#

... ist veraltet. Bitte verwenden Sie stattdessen matplotlib.cbook.sanitize_sequence.

Modul-weite Konstanten von ft2font ersetzt durch Enums#

Die Konstanten auf ft2font-Ebene wurden in enum-Klassen umgewandelt, und die gesamte API, die sie verwendet, nimmt nun die neuen Typen entgegen/gibt sie zurück.

Die folgenden Konstanten sind nun Teil von ft2font.Kerning (ohne den Präfix KERNING_)

  • KERNING_DEFAULT

  • KERNING_UNFITTED

  • KERNING_UNSCALED

Die folgenden Konstanten sind nun Teil von ft2font.LoadFlags (ohne den Präfix LOAD_)

  • LOAD_DEFAULT

  • LOAD_NO_SCALE

  • LOAD_NO_HINTING

  • LOAD_RENDER

  • LOAD_NO_BITMAP

  • LOAD_VERTICAL_LAYOUT

  • LOAD_FORCE_AUTOHINT

  • LOAD_CROP_BITMAP

  • LOAD_PEDANTIC

  • LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH

  • LOAD_NO_RECURSE

  • LOAD_IGNORE_TRANSFORM

  • LOAD_MONOCHROME

  • LOAD_LINEAR_DESIGN

  • LOAD_NO_AUTOHINT

  • LOAD_TARGET_NORMAL

  • LOAD_TARGET_LIGHT

  • LOAD_TARGET_MONO

  • LOAD_TARGET_LCD

  • LOAD_TARGET_LCD_V

Die folgenden Konstanten sind nun Teil von ft2font.FaceFlags

  • EXTERNAL_STREAM

  • FAST_GLYPHS

  • FIXED_SIZES

  • FIXED_WIDTH

  • GLYPH_NAMES

  • HORIZONTAL

  • KERNING

  • MULTIPLE_MASTERS

  • SCALABLE

  • SFNT

  • VERTICAL

Die folgenden Konstanten sind nun Teil von ft2font.StyleFlags

  • ITALIC

  • BOLD

Initialisierung von FontProperties#

FontProperties-Initialisierung ist auf die zwei Aufrufmuster beschränkt

  • einzelnes Positionsargument, interpretiert als Fontconfig-Muster

  • nur Schlüsselwortargumente zur Festlegung einzelner Eigenschaften

Alle anderen bisher unterstützten Aufrufmuster sind veraltet.

AxLine xy1 und xy2 Setter#

Diese Setter nehmen nun jeweils ein einzelnes Argument entgegen, xy1 oder xy2 als Tupel. Die alte Form, bei der x und y als separate Argumente übergeben wurden, ist veraltet.

Aufruf von pyplot.polar() mit einer vorhandenen nicht-polaren Achse#

Dies plottet die Daten derzeit in die nicht-polare Achse und ignoriert die "polare" Absicht. Dieses Nutzungsszenario ist veraltet und wird zukünftig einen Fehler auslösen.

Übergabe von Gleitkommawerten an RendererAgg.draw_text_image#

Alle Gleitkommawerte, die an die Parameter x und y übergeben wurden, wurden stillschweigend auf ganze Zahlen abgeschnitten. Dieses Verhalten ist nun veraltet, und es sollten nur noch int-Werte verwendet werden.

Übergabe von Gleitkommawerten an FT2Image#

Alle Gleitkommawerte, die an den Konstruktor FT2Image oder an die Parameter x0, y0, x1 und y1 von FT2Image.draw_rect_filled übergeben wurden, wurden stillschweigend auf ganze Zahlen abgeschnitten. Dieses Verhalten ist nun veraltet, und es sollten nur noch int-Werte verwendet werden.

Parameter vert von boxplot und bxp und rcParams["boxplot.vertical"]#

Der Parameter vert: bool ist bei boxplot und bxp veraltet. Er wird durch orientation: {"vertical", "horizontal"} zur API-Konsistenz ersetzt.

rcParams["boxplot.vertical"], das die Ausrichtung von boxplot steuerte, ist ohne Ersatz veraltet.

Diese Veraltung ist derzeit als ausstehend markiert und wird in Matplotlib 3.11 vollständig veraltet sein.

Parameter vert von violinplot und violin#

Der Parameter vert: bool ist bei violinplot und violin veraltet. Er wird durch orientation: {"vertical", "horizontal"} zur API-Konsistenz ersetzt.

Diese Veraltung ist derzeit als ausstehend markiert und wird in Matplotlib 3.11 vollständig veraltet sein.

proj3d.proj_transform_clip#

... ist veraltet ohne Ersatz.

Entfernungen#

ttconv entfernt#

Die Erweiterung matplotlib._ttconv wurde entfernt. Ein Großteil ihrer Funktionalität wurde bereits durch anderen Code ersetzt, und das Einbetten von TTF-Schriftarten in PostScript im Type-42-Format war das Einzige, was übrig blieb. Dies geschieht nun im PS-Backend unter Verwendung der FontTools-Bibliothek.

Entfernung der festen Referenz auf lastevent in LocationEvent#

Dies wurde zuvor zur Erkennung des Verlassens von Achsen verwendet, jedoch hielt die feste Referenz geschlossene Figure-Objekte und ihre Kinder länger als erwartet am Leben.

ft2font.FT2Image.draw_rect und ft2font.FT2Font.get_xys#

... wurden entfernt, da sie unbenutzt sind.

Tick.set_label, Tick.set_label1 und Tick.set_label2#

... wurden entfernt. Das Aufrufen dieser Methoden aus Drittanbietercode hatte normalerweise keine Auswirkungen, da die Labels zur Zeichenzeit vom Tick-Formatter überschrieben werden.

Funktionen in mpl_toolkits.mplot3d.proj3d#

Die Funktion transform ist nur ein Alias für proj_transform, verwenden Sie stattdessen letztere.

Die folgenden Funktionen waren entweder unbenutzt (und daher in Matplotlib nicht mehr erforderlich) oder galten als privat.

  • ortho_transformation

  • persp_transformation

  • proj_points

  • proj_trans_points

  • rot_x

  • rotation_about_vector

  • view_transformation

Argumente außer renderer an get_tightbbox#

... sind schlüsselwortweise zu übergebende Argumente. Dies dient der Konsistenz und der Tatsache, dass verschiedene Klassen unterschiedliche zusätzliche Argumente haben.

Methodenparameter umbenannt, um mit Basisklassen übereinzustimmen#

Das einzige Argument von transform_affine und transform_non_affine in Transform-Unterklassen wird in values umbenannt.

Das Argument points von transforms.IdentityTransform.transform wird in values umbenannt.

Das Argument trans von table.Cell.set_transform wird konsistent mit Artist.set_transform in t umbenannt.

Die Argumente clippath von axis.Axis.set_clip_path und axis.Tick.set_clip_path werden konsistent mit Artist.set_clip_path in path umbenannt.

Das Argument s von images.NonUniformImage.set_filternorm wird konsistent mit _ImageBase.set_filternorm in filternorm umbenannt.

Das Argument s von images.NonUniformImage.set_filterrad wird konsistent mit _ImageBase.set_filterrad in filterrad umbenannt.

Das einzige Argument von Annotation.contains und Legend.contains wird konsistent mit Artist.contains in mouseevent umbenannt.

Methodenparameter umbenannt#

Das Argument p von BboxBase.padded wird konsistent mit dem anderen Argument h_pad in w_pad umbenannt.

Parameter und Attribut numdecs von LogLocator#

... wurden ohne Ersatz entfernt, da sie keine Auswirkung hatten. Die Klasse PolyQuadMesh erfordert vollständige 2D-Arrays von Werten ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Zuvor schrumpfte bei Eingabe eines maskierten Arrays die Liste der Polygone innerhalb der Sammlung auf die Größe der gültigen Polygone, und die Benutzer mussten verfolgen, welche Polygone gezeichnet wurden, und set_array() mit der kleineren "komprimierten" Array-Größe aufrufen. Die Übergabe der "komprimierten" und abgeflachten Array-Werte funktioniert nicht mehr, und das vollständige 2D-Array der Werte (einschließlich der Maske) sollte an PolyQuadMesh.set_array übergeben werden. ContourSet.collections ~~~~~~~~~~~~~~~~~~~~~~~~~~

... wurde entfernt. ContourSet wird nun als eine einzige Collection von Pfaden implementiert, wobei jeder Pfad einem Konturniveau entspricht und möglicherweise mehrere unverbundene Komponenten enthält.

ContourSet.antialiased#

... wurde entfernt. Verwenden Sie stattdessen get_antialiased oder set_antialiased. Beachten Sie, dass get_antialiased ein Array zurückgibt.

Attribute tcolors und tlinewidths von ContourSet#

... wurden entfernt. Verwenden Sie stattdessen get_facecolor, get_edgecolor oder get_linewidths.

Methode calc_label_rot_and_inline von ContourLabeler#

... wurde ohne Ersatz entfernt.

Methode add_label_clabeltext von ContourLabeler#

... wurde entfernt. Verwenden Sie stattdessen add_label. Übergabe zusätzlicher Positionsargumente an Figure.add_axes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Positionsargumente, die an Figure.add_axes übergeben wurden und keine Werte für rect oder ein vorhandenes Axes waren, wurden zuvor ignoriert und führen nun zu einem Fehler.

Künstler, die explizit übergeben werden, werden von legend() nicht mehr nach ihrem Label gefiltert.

Zuvor wurden Künstler, die explizit an legend(handles=[...]) übergeben wurden, herausgefiltert, wenn ihr Label mit einem Unterstrich begann. Dieser Filter wird nicht mehr angewendet; filtern Sie solche Künstler explizit heraus ([art for art in artists if not art.get_label().startswith('_')]), falls erforderlich.

Beachten Sie, dass, wenn gar keine Handles angegeben sind, Labels, die mit einem Unterstrich beginnen, standardmäßig weiterhin herausgefiltert werden.

Der Parameter von Annotation.contains und Legend.contains wurde in mouseevent umbenannt.

... konsistent mit Artist.contains.

Unterstützung für die Übergabe des Schlüssels "frac" in annotate(..., arrowprops={"frac": ...})

... wurde entfernt. Dieser Schlüssel hatte seit Matplotlib 1.5 keine Auswirkung mehr.

Das Übergeben von Nicht-Integer oder Sequenzen von Nicht-Integer an Table.auto_set_column_width

Spaltennummern sind Integer, und früher wurde jeder andere Typ effektiv ignoriert. Dies führt nun zu einem Fehler.

Widgets#

Der Getter für das Attribut visible von *Selector Widgets wurde entfernt; verwenden Sie stattdessen get_visible.

Automatisches Schließen von Figuren beim Wechseln des Backends

Zulässige Backend-Wechsel (d. h. solche, die keine GUI-Event-Schleife mit einer anderen tauschen) schließen bestehende Figuren nicht. Rufen Sie bei Bedarf plt.close("all") auf, bevor Sie wechseln.

FigureCanvasBase.switch_backends

... wurde ohne Ersatz entfernt.

Der Zugriff auf event.guiEvent nach der Rückgabe von Event-Handlern

... wird nicht mehr unterstützt, und event.guiEvent wird auf None gesetzt, sobald die Event-Handler zurückkehren. Für einige GUI-Toolkits ist die Verwendung des Events unsicher, Sie können das Objekt jedoch auf eigene Gefahr separat aufbewahren.

PdfPages(keep_empty=True)

Ein PDF mit null Seiten ist ungültig, daher ist die Übergabe von keep_empty=True an backend_pdf.PdfPages und backend_pgf.PdfPages sowie das Attribut keep_empty dieser Klassen nicht mehr zulässig, und leere PDF-Dateien werden nicht erstellt.

Darüber hinaus erstellt backend_pdf.PdfPages die Zieldatei nicht mehr sofort bei der Instanziierung, sondern erst, wenn die erste Figur gespeichert wird. Um die Dateierstellung vollständig zu steuern, übergeben Sie direkt ein geöffnetes Dateiobjekt als Argument (with open(path, "wb") as file, PdfPages(file) as pdf: ...).

backend_ps.psDefs

Die Modulvariable psDefs in backend_ps wurde ohne Ersatz entfernt.

Automatische Papiergrößenwahl in PostScript

Das Setzen von rcParams["ps.papersize"] (Standard: 'letter') auf 'auto' oder das Übergeben von papersize='auto' an Figure.savefig wird nicht mehr unterstützt. Übergeben Sie entweder einen expliziten Papiertypnamen oder lassen Sie diesen Parameter weg, um den Standard aus dem rcParam zu verwenden.

RendererAgg.tostring_rgb und FigureCanvasAgg.tostring_rgb

... wurden ohne direkten Ersatz entfernt. Erwägen Sie die Verwendung von buffer_rgba, was die meisten Anwendungsfälle abdecken sollte.

TexManager.texcache

... wird als privat betrachtet und wurde entfernt. Der Speicherort des Cache-Verzeichnisses ist im Doc-String erläutert.

Änderungen an der cbook API

cbook.Stack wurde ohne Ersatz entfernt.

Grouper.clean() wurde ohne Ersatz entfernt. Die Grouper-Klasse bereinigt sich nun automatisch.

Der Parameter np_load von cbook.get_sample_data wurde entfernt; get_sample_data lädt nun automatisch Numpy-Arrays. Verwenden Sie stattdessen get_sample_data(..., asfileobj=False), um den Dateinamen der Datendatei zu erhalten, der dann bei Bedarf an open übergeben werden kann.

Aufruf von paths.get_path_collection_extents mit leeren offsets

Der Aufruf von get_path_collection_extents mit einem leeren offsets Parameter hat eine mehrdeutige Interpretation und ist nicht mehr zulässig.

bbox.anchored() ohne expliziten Container

Das Nicht-Übergeben eines container Arguments an BboxBase.anchored wird nicht mehr unterstützt.

INVALID_NON_AFFINE, INVALID_AFFINE, INVALID Attribute von TransformNode

Diese Attribute wurden entfernt.

Änderungen an der axes_grid1 API

anchored_artists.AnchoredEllipse wurde entfernt. Erstellen Sie stattdessen direkt eine AnchoredOffsetbox, eine AuxTransformBox und eine Ellipse, wie in Anchored Artists gezeigt.

Die Klasse axes_divider.AxesLocator wurde entfernt. Die Methode new_locator von Divider-Instanzen gibt nun stattdessen einen opak verpackten Callable zurück (der immer noch an ax.set_axes_locator übergeben werden kann).

axes_divider.Divider.locate wurde entfernt; verwenden Sie stattdessen Divider.new_locator(...)(ax, renderer).

axes_grid.CbarAxesBase.toggle_label wurde entfernt. Verwenden Sie stattdessen Standardmethoden zur Manipulation von Farbleistenbeschriftungen (Colorbar.set_label) und Tick-Beschriftungen (Axes.tick_params).

inset_location.InsetPosition wurde entfernt; verwenden Sie stattdessen inset_axes.

Änderungen an der axisartist API

Die Module axisartist.axes_grid und axisartist.axes_rgb, die Wrapper sind, die die Funktionalität von axes_grid1 und axisartist kombinieren, wurden entfernt; verwenden Sie stattdessen z. B. AxesGrid(..., axes_class=axislines.Axes).

Der Aufruf eines Achsenkünstler-Achsenobjekts zur Bedeutung von axis wurde entfernt; rufen Sie die Methode stattdessen explizit auf.

floating_axes.GridHelperCurveLinear.get_data_boundary wurde entfernt. Verwenden Sie grid_finder.extreme_finder(*[None] * 5), um die Extreme des Gitters zu erhalten.

Entwicklungsänderungen

Dokumentationsspezifische benutzerdefinierte Sphinx-Rollen sind jetzt semi-öffentlich.

Für Drittanbieterpakete, die Typen von Matplotlib ableiten, kann unsere Verwendung von benutzerdefinierten Rollen verhindern, dass Sphinx ihre Dokumentationen erstellt. Diese benutzerdefinierten Sphinx-Rollen sind nun ausschließlich für die Verwendung in Projekten öffentlich, die von Matplotlib-Typen abgeleitet sind. Details finden Sie unter matplotlib.sphinxext.roles.

Erhöhung der minimal unterstützten Versionen von Abhängigkeiten.

Für Matplotlib 3.10 werden die minimal unterstützten Versionen angehoben.

Abhängigkeit

min in mpl3.9

min in mpl3.10

Python

3.9

3.10

Dies steht im Einklang mit unserer Richtlinie für minimale Abhängigkeitsversionen und SPEC0.