API-Änderungen für 3.5.0#

Verhaltensänderungen#

Erstes Argument für subplot_mosaic umbenannt#

Sowohl Figure.subplot_mosaic als auch pyplot.subplot_mosaic haben das erste Positionsargument von layout in mosaic umbenannt. Da wir die Schlüsselwortargumente constrained_layout und tight_layout in den Figurenerstellungsfunktionen von pyplot zu einem einzigen layout-Schlüsselwortargument zusammengefasst haben, würde der ursprüngliche subplot_mosaic-Argumentname kollidieren.

Da diese API provisorisch ist, ändern wir diesen Argumentnamen ohne eine Vorwarnzeit.

Axes-Kinder werden nicht mehr nach Typ getrennt#

Früher wurden die Kinder von axes.Axes nach Artist-Typ in Unterlisten wie Axes.lines aufgeteilt. Bei Methoden, die mehrere Elemente erzeugten (wie Axes.errorbar), obwohl einzelne Teile einen ähnlichen zorder hätten, könnte diese Trennung dazu führen, dass sie zu unterschiedlichen Zeiten gezeichnet werden, was zu inkonsistenten Ergebnissen führt, wenn andere Künstler überlappen.

Jetzt werden die Kinder nicht mehr nach Typ getrennt, und die Unterlisten-Eigenschaften werden dynamisch generiert, wenn darauf zugegriffen wird. Folglich erscheinen Künstler jetzt immer in der richtigen Unterliste; z. B. wenn axes.Axes.add_line auf ein Patch angewendet wird, erscheint es in der Unterliste Axes.patches, nicht in Axes.lines. Die Axes.add_*-Methoden geben nun eine Warnung aus, wenn ein unerwarteter Typ übergeben wird.

Die Modifikation der folgenden Unterlisten wird weiterhin akzeptiert, ist aber veraltet

  • Axes.artists

  • Axes.collections

  • Axes.images

  • Axes.lines

  • Axes.patches

  • Axes.tables

  • Axes.texts

Um einen Künstler zu entfernen, verwenden Sie seine Artist.remove-Methode. Um einen Künstler hinzuzufügen, verwenden Sie die entsprechende Axes.add_*-Methode.

MatplotlibDeprecationWarning erbt nun von DeprecationWarning#

Historisch war es nicht möglich, MatplotlibDeprecationWarnings zu filtern, indem auf DeprecationWarning geprüft wurde, da wir direkt von UserWarning erben.

Die Entscheidung, nicht von DeprecationWarning zu erben, hat mit einer Entscheidung des Python-Kerns aus der 2.x-Ära zu tun, DeprecationWarnings nicht an Benutzer anzuzeigen. Es gibt jedoch jetzt einen ausgefeilteren Filter (siehe https://pythonlang.de/dev/peps/pep-0565/).

Benutzer sehen MatplotlibDeprecationWarnings nun nur noch während interaktiver Sitzungen, und diese können durch den Standardmechanismus unterdrückt werden.

warnings.filterwarnings("ignore", category=DeprecationWarning)

Bibliotheksautoren müssen nun DeprecationWarnings explizit aktivieren, damit (nicht-interaktive) CI/CD-Pipelines diese Warnungen zurückmelden, wie es für den Rest des Python-Ökosystems üblich ist.

warnings.filterwarnings("always", DeprecationWarning)

Artist.set wendet Künstler-Eigenschaften in der Reihenfolge an, in der sie angegeben werden#

Die Änderung betrifft nur die Interaktion zwischen den Eigenschaften color, edgecolor, facecolor und (für Collections) alpha: Die Eigenschaft color muss nun zuerst übergeben werden, um die anderen Eigenschaften nicht zu überschreiben. Dies ist konsistent mit z. B. Artist.update, welche die ihr übergebenen Eigenschaften nicht neu ordnete.

pcolor(mesh)-Schattierung standardmäßig auf auto#

Das Schlüsselwortargument shading für Axes.pcolormesh und Axes.pcolor wurde auf 'auto' geändert.

Die Übergabe von Z(M, N), x(N), y(M) an pcolormesh mit shading='flat' löst nun einen TypeError aus. Verwenden Sie shading='auto' oder shading='nearest', damit x und y als Zellmittelpunkte behandelt werden, oder lassen Sie die letzte Spalte und Zeile von Z weg, um das alte Verhalten mit shading='flat' zu erhalten.

Farbleisten haben jetzt Pan- und Zoom-Funktionalität#

Interaktive Plots mit Farbleisten können jetzt auf der Farbleistenachse gezoomt und geschwenkt werden. Dies passt den vmin und vmax der ScalarMappable an, die mit der Farbleiste assoziiert ist. Dies ist derzeit nur für kontinuierliche Normen aktiviert. Normen, die mit contourf und Kategorien verwendet werden, wie BoundaryNorm und NoNorm, haben die interaktive Funktion standardmäßig deaktiviert. cb.ax.set_navigate() kann verwendet werden, um festzulegen, ob eine Farbleistenachse interaktiv ist oder nicht.

Farbleistenlinien werden nicht mehr abgeschnitten#

Wenn einer Farbleiste Linien hinzugefügt werden (z. B. für Konturlinien), werden diese nicht mehr abgeschnitten. Dies ist eine Verbesserung für Linien am Rand der Farbleiste, könnte aber zu Linien außerhalb der Farbleiste führen, wenn die Grenzen der Farbleiste geändert werden.

Figure.suppressComposite steuert nun auch die Komposition von Achsenbildern#

Die Ausgabe von NonUniformImage und PcolorImage hat sich geändert#

Auf Pixelebene können Unterschiede in Bildern beobachtet werden, die mit NonUniformImage oder PcolorImage generiert wurden, typischerweise für Pixel genau an der Grenze zwischen zwei Datenzellen (keine achsenmethodenorientierten Benutzeroberflächen erzeugen derzeit NonUniformImages, und nur pcolorfast kann PcolorImages erzeugen). Diese Künstler sind auch langsamer, normalerweise um etwa das 1,5-fache, manchmal aber auch mehr (insbesondere für NonUniformImage(interpolation="bilinear"). Diese Verlangsamung ergibt sich aus der Behebung gelegentlicher Gleitkomma-Ungenauigkeiten.

Änderung des (standardmäßigen) Legendenhandlers für Line2D-Instanzen#

Der Standard-Legendenhandler für Line2D-Instanzen (HandlerLine2D) stellt nun konsistent alle Attribute und Methoden bereit, die sich auf das Linienmarker (#11358) beziehen. Dies erleichtert die Änderung der Marker-Merkmale nach der Instanziierung einer Legende.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.plot([1, 3, 2], marker="s", label="Line", color="pink", mec="red", ms=8)
leg = ax.legend()

leg.legendHandles[0].set_color("lightgray")
leg.legendHandles[0].set_mec("black")  # marker edge color

Der frühere Legendenhandler für Line2D-Objekte wurde in HandlerLine2DCompound umbenannt. Um zum vorherigen Verhalten zurückzukehren, kann man verwenden:

import matplotlib.legend as mlegend
from matplotlib.legend_handler import HandlerLine2DCompound
from matplotlib.lines import Line2D

mlegend.Legend.update_default_handler_map({Line2D: HandlerLine2DCompound()})

Setzen von Line2D Marker Kanten-/Flächenfarbe auf None verwendet rcParams#

Line2D.set_markeredgecolor(None) und Line2D.set_markerfacecolor(None) setzen nun die Linieneigenschaft unter Verwendung der entsprechenden rcParam (rcParams["lines.markeredgecolor"] (Standard: 'auto') und rcParams["lines.markerfacecolor"] (Standard: 'auto')). Dies ist konsistent mit anderen Line2D-Eigenschaftssettern.

Standard-Theta-Tick-Positionen für Keil-Polarplots haben sich geändert#

Für Polarplots, die keinen vollen Kreis abdecken, liegen die Standard-Theta-Tick-Positionen nun bei Vielfachen von 10°, 15°, 30°, 45°, 90°, anstatt Werte zu verwenden, die größtenteils für lineare Plots sinnvoll sind (20°, 25° usw.).

axvspan plottet nun vollständige Keile in Polarplots#

... anstelle von Dreiecken.

Bequemer Konverter von Scale zu Normalize jetzt öffentlich#

Downstream-Bibliotheken können colors.make_norm_from_scale nutzen, um eine Normalize-Unterklasse direkt aus einer vorhandenen Skala zu erstellen. Normalerweise haben Normen eine Skala, und der Vorteil einer ScaleBase, die an eine Norm angehängt ist, besteht darin, eine Skala und zugehörige Tick-Locators und Formatierer für die Farbleiste bereitzustellen.

ContourSet verwendet immer PathCollection#

Um Rendering-Probleme mit geschlossenen Schleifen zu beheben, erstellt ContourSet nun eine PathCollection anstelle einer LineCollection für Linienkonturen. Dieser Typ entspricht dem Künstler, der für gefüllte Konturen verwendet wird.

Dies betrifft ContourSet selbst und seine Unterklassen, QuadContourSet (zurückgegeben von Axes.contour) und TriContourSet (zurückgegeben von Axes.tricontour).

hatch.SmallFilledCircles erbt von hatch.Circles#

Die Klasse hatch.SmallFilledCircles erbt nun von hatch.Circles anstatt von hatch.SmallCircles.

Hexbin mit Log-Norm#

hexbin fügt bei Verwendung einer Log-Norm nun nicht mehr (fälschlicherweise) 1 zu jedem Bin-Wert hinzu.

Setzen einer ungültigen rcParams["date.converter"] löst nun ValueError aus#

Zuvor wurden ungültige Werte, die an rcParams["date.converter"] (Standard: 'auto') übergeben wurden, mit einer UserWarning ignoriert, lösen aber nun ValueError aus.

Text und TextBox haben die Option parse_math hinzugefügt#

Text und TextBox Objekte erlauben nun ein Schlüsselwortargument parse_math, das steuert, ob Mathematik aus dem angezeigten String analysiert werden soll. Wenn True, wird der String als Mathe-Text-Objekt analysiert. Wenn False, wird der String als Literal betrachtet und keine Analyse durchgeführt.

Für Text ist dieses Argument standardmäßig True. Für TextBox ist dieses Argument standardmäßig False.

Type1Font-Objekte entschlüsseln nun den verschlüsselten Teil#

Type 1-Schriften haben einen großen Teil ihres Codes als obsoleter Kopierschutzmaßnahme verschlüsselt. Dieser Teil ist nun als Attribut decrypted von matplotlib.type1font.Type1Font entschlüsselt verfügbar. Diese entschlüsselten Daten werden noch nicht analysiert, aber dies ist eine Voraussetzung für die Implementierung der Unterteilung.

3D-Kontur-Polygone zwischen Niveaus platziert#

Die Polygone, die in einem 3D contourf-Plot verwendet werden, werden nun auf halbem Weg zwischen den Konturniveaus platziert, da jedes Polygon die Position von Werten repräsentiert, die zwischen zwei Niveaus liegen.

AxesDivider verwendet nun standardmäßig rcParams-spezifizierte Abstände#

AxesDivider.append_axes, AxesDivider.new_horizontal und AxesDivider.new_vertical verwenden nun standardmäßig Abstände, die von rcParams["figure.subplot.wspace"] (Standard: 0.2) und rcParams["figure.subplot.hspace"] (Standard: 0.2) angegeben werden, anstatt null.

Veraltete Funktionen#

Abgeraten: Figure-Parameter tight_layout und constrained_layout#

Die Figure-Parameter tight_layout und constrained_layout lösen konkurrierende Layout-Mechanismen aus und sollten daher nicht zusammen verwendet werden.

Um die API klarer zu gestalten, haben wir sie unter dem neuen Parameter layout mit den Werten 'constrained' (gleichbedeutend mit constrained_layout=True), 'tight' (gleichbedeutend mit tight_layout=True) zusammengeführt. Wenn angegeben, hat layout Vorrang.

Die Verwendung von tight_layout und constrained_layout wird zugunsten von layout abgeraten. Diese Parameter bleiben jedoch für die Abwärtskompatibilität erhalten.

Modifikation von Axes-Kinder-Unterlisten#

Siehe Axes-Kinder werden nicht mehr nach Typ getrennt für weitere Informationen; die Modifikation der folgenden Unterlisten ist veraltet.

  • Axes.artists

  • Axes.collections

  • Axes.images

  • Axes.lines

  • Axes.patches

  • Axes.tables

  • Axes.texts

Um einen Künstler zu entfernen, verwenden Sie seine Artist.remove-Methode. Um einen Künstler hinzuzufügen, verwenden Sie die entsprechende Axes.add_*-Methode.

Übergabe falscher Typen an Axes.add_*-Methoden#

Die folgenden Axes.add_*-Methoden geben nun eine Warnung aus, wenn ein unerwarteter Typ übergeben wird. Sehen Sie deren Dokumentation für die erwarteten Typen.

Abgeraten: plot_date#

Die Verwendung von plot_date wird abgeraten. Diese Methode existiert aus historischen Gründen und könnte in Zukunft veraltet werden.

  • Daten vom Typ datetime sollten direkt mit plot geplottet werden.

  • Wenn Sie numerische Daten als Matplotlib-Datumsformat plotten oder eine Zeitzone festlegen müssen, rufen Sie ax.xaxis.axis_date / ax.yaxis.axis_date vor plot auf. Siehe Axis.axis_date.

epoch2num und num2epoch sind veraltet#

Diese Methoden konvertieren von Unix-Zeitstempeln zu Matplotlib-Floats, werden aber nicht intern von Matplotlib verwendet und sollten von Endbenutzern nicht benötigt werden. Um einen Unix-Zeitstempel in ein Datum/eine Uhrzeit zu konvertieren, verwenden Sie einfach datetime.datetime.utcfromtimestamp oder verwenden Sie NumPy datetime64 dt = np.datetime64(e*1e6, 'us').

Automatische Entfernung von Gittern durch pcolor und pcolormesh#

pcolor und pcolormesh entfernen derzeit sichtbare Hauptgitter der Achsen. Dieses Verhalten ist veraltet; rufen Sie explizit ax.grid(False) auf, um das Gitter zu entfernen.

Das erste Argument von Axes.grid und Axis.grid wurde in visible umbenannt#

Der Parameter hieß zuvor b. Diese Veralterung ist nur relevant, wenn dieser Parameter mit einem Schlüsselwortargument übergeben wurde, z. B. grid(b=False).

Vereinheitlichung und Bereinigung der Selector-Widget-API#

Die API für Selector-Widgets wurde vereinheitlicht, um Folgendes zu verwenden:

  • props für die Eigenschaften des Künstlers, der die Auswahl repräsentiert.

  • handle_props für die Künstler, die Griffe zur Modifizierung der Auswahl repräsentieren.

  • grab_range für die maximale Toleranz, um einen Griff mit der Maus zu greifen.

Zusätzlich wurden mehrere interne Parameter und Attribute veraltet, mit der Absicht, sie privat zu halten.

RectangleSelector und EllipseSelector#

Das Schlüsselwortargument drawtype für RectangleSelector ist veraltet. Zukünftig wird nur noch das Standardverhalten von drawtype='box' gelten.

Die Unterstützung für drawtype=line wird vollständig entfernt, da unklar ist, welche Punkte sich innerhalb und außerhalb eines Selektors befinden, der nur eine Linie ist. Daher ist auch das Schlüsselwortargument lineprops für RectangleSelector veraltet.

Um das Verhalten von drawtype='none' beizubehalten, verwenden Sie rectprops={'visible': False}, um das gezeichnete Rectangle unsichtbar zu machen.

Bereinigte Attribute und Argumente sind

  • Das Attribut active_handle wurde privatisiert und veraltet.

  • Das Attribut drawtype wurde privatisiert und veraltet.

  • Das Attribut eventpress wurde privatisiert und veraltet.

  • Das Attribut eventrelease wurde privatisiert und veraltet.

  • Das Attribut interactive wurde privatisiert und veraltet.

  • Das Argument marker_props ist veraltet, verwenden Sie stattdessen handle_props.

  • Das Argument maxdist ist veraltet, verwenden Sie stattdessen grab_range.

  • Das Argument rectprops ist veraltet, verwenden Sie stattdessen props.

  • Das Attribut rectprops wurde privatisiert und veraltet.

  • Das Attribut state wurde privatisiert und veraltet.

  • Das Attribut to_draw wurde privatisiert und veraltet.

PolygonSelector#

  • Das Attribut line ist veraltet. Wenn Sie die Eigenschaften des Selektor-Künstlers ändern möchten, verwenden Sie die Methoden set_props oder set_handle_props.

  • Das Argument lineprops ist veraltet, verwenden Sie stattdessen props.

  • Das Argument markerprops ist veraltet, verwenden Sie stattdessen handle_props.

  • Das Argument und Attribut maxdist ist veraltet, verwenden Sie stattdessen grab_range.

  • Das Argument und Attribut vertex_select_radius ist veraltet, verwenden Sie stattdessen grab_range.

SpanSelector#

  • Das Attribut active_handle wurde privatisiert und veraltet.

  • Das Attribut eventpress wurde privatisiert und veraltet.

  • Das Attribut eventrelease wurde privatisiert und veraltet.

  • Das Argument und Attribut maxdist ist veraltet, verwenden Sie stattdessen grab_range.

  • Das Attribut pressv wurde privatisiert und veraltet.

  • Das Attribut prev wurde privatisiert und veraltet.

  • Das Attribut rect wurde privatisiert und veraltet.

  • Das Argument rectprops ist veraltet, verwenden Sie stattdessen props.

  • Das Attribut rectprops wurde privatisiert und veraltet.

  • Das Argument span_stays ist veraltet, verwenden Sie stattdessen das Argument interactive.

  • Das Attribut span_stays wurde privatisiert und veraltet.

  • Das Attribut state wurde privatisiert und veraltet.

LassoSelector#

  • Das Argument lineprops ist veraltet, verwenden Sie stattdessen props.

  • Die Methoden onpress und onrelease sind veraltet. Sie sind direkte Aliase für press und release.

ConversionInterface.convert muss keine Einheiten-losen Werte mehr akzeptieren#

Zuvor mussten benutzerdefinierte Unterklassen von units.ConversionInterface eine convert-Methode implementieren, die nicht nur Instanzen der Einheit, sondern auch einheitenlose Werte akzeptierte (die unverändert durchgereicht wurden). Dies ist nicht mehr der Fall (convert wird nie mit einem einheitenlosen Wert aufgerufen), und eine solche Unterstützung in StrCategoryConverter ist veraltet. Ebenso ist die Hilfsfunktion .ConversionInterface.is_numlike veraltet.

Erwägen Sie stattdessen den Aufruf von Axis.convert_units, die weiterhin einheitenlose Werte unterstützt.

Locator- und Formatter-Wrapper-Methoden#

Die Methoden set_view_interval, set_data_interval und set_bounds von Locators und Formatters (und ihrer gemeinsamen Basisklasse, TickHelper) sind veraltet. Manipulieren Sie stattdessen direkt die Ansichts- und Datenintervalle auf der zugrunde liegenden Achse.

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

Keine der von Canvas-Unterklassen implementierten print_<fmt>-Methoden verwendete andere Positionsargumente als das erste (der Ausgabename oder die Ausgabedatei), daher sind diese zusätzlichen Parameter veraltet.

QuadMesh Signatur#

Die Signatur von QuadMesh

def __init__(meshWidth, meshHeight, coordinates,
             antialiased=True, shading='flat', **kwargs)

ist veraltet und ersetzt durch die neue Signatur

def __init__(coordinates, *, antialiased=True, shading='flat', **kwargs)

Insbesondere

  • Das Argument coordinates muss nun ein Array-ähnliches Objekt der Form (M, N, 2) sein. Zuvor wurde die Gitterform separat als (meshHeight + 1, meshWidth + 1) angegeben und coordinates konnte ein Array-ähnliches Objekt beliebiger Form mit M * N * 2 Elementen sein.

  • Alle Parameter außer coordinates sind jetzt schlüsselwortgesteuert.

rcParams werden Eingaben nicht mehr in str umwandeln#

Nach einer Verfallsfrist werden rcParams, die eine (nicht-pfadähnliche) Zeichenkette erwarten, keine nicht-Zeichenketten-Eingaben mehr mit str umwandeln. Dies vermeidet verwirrende Fehler in nachfolgendem Code, wenn z. B. eine Listen-Eingabe implizit in eine Zeichenkette umgewandelt wird.

Groß-/Kleinschreibung-unempfindliche Skalen#

Zuvor konnten Skalen groß-/kleinschreibungsunempfindlich gesetzt werden (z. B. set_xscale("LoG")). Dies ist veraltet; alle integrierten Skalen verwenden Kleinbuchstaben.

Details zum interaktiven Cursor#

Das Setzen eines Mauscousors auf einem Fenster wurde von der Symbolleiste auf die Leinwand verschoben. Infolgedessen sind mehrere Implementierungsdetails von Symbolleisten und Backends veraltet.

backend_tools.SetCursorBase und Unterklassen#

backend_tools.SetCursorBase wurde unterklassifiziert, um Backend-spezifische Implementierungen von set_cursor bereitzustellen. Da dies nun veraltet ist, ist die Unterklassifizierung nicht mehr notwendig. Folglich sind die folgenden Unterklassen ebenfalls veraltet

  • matplotlib.backends.backend_gtk3.SetCursorGTK3

  • matplotlib.backends.backend_qt5.SetCursorQt

  • matplotlib.backends._backend_tk.SetCursorTk

  • matplotlib.backends.backend_wx.SetCursorWx

Verwenden Sie stattdessen die Klasse backend_tools.ToolSetCursor.

cursord in GTK-, Qt- und wx-Backends#

Die Wörterbücher backend_gtk3.cursord, backend_qt.cursord und backend_wx.cursord sind veraltet. Dies ermöglicht den Import des GTK-Moduls in headless Umgebungen.

Sonstige Veralterungen#

  • is_url und URL_REGEX sind veraltet. (Sie wurden zuvor im Top-Level-Modul matplotlib definiert.)

  • Die Attribute ArrowStyle.beginarrow und ArrowStyle.endarrow sind veraltet; verwenden Sie stattdessen das Attribut arrow, um die gewünschten Spitzen und Enden des Pfeils zu definieren.

  • backend_pgf.LatexManager.str_cache ist veraltet.

  • backends.qt_compat.ETS und backends.qt_compat.QT_RC_MAJOR_VERSION sind veraltet, ohne Ersatz.

  • Das Modul blocking_input ist veraltet. Verwenden Sie stattdessen canvas.start_event_loop() und canvas.stop_event_loop(), während Sie bei Bedarf Ereignis-Callbacks verbinden.

  • cbook.report_memory ist veraltet; verwenden Sie stattdessen psutil.virtual_memory.

  • cm.LUTSIZE ist veraltet. Verwenden Sie stattdessen rcParams["image.lut"] (Standard: 256). Dieser Wert beeinflusst nur die Quantisierungsstufen von Colormaps für Standard-Colormaps, die beim Import des Moduls generiert werden.

  • Collection.__init__ ignorierte zuvor transOffset, ohne dass offsets ebenfalls angegeben wurde. Zukünftig wird transOffset unabhängig von offsets wirksam. In der Zwischenzeit, wenn Sie transOffset setzen möchten, rufen Sie Collection.set_offset_transform explizit auf.

  • Colorbar.patch ist veraltet; dieses Attribut wird nicht mehr korrekt aktualisiert.

  • ContourLabeler.get_label_width ist veraltet.

  • dviread.PsfontsMap löst jetzt LookupError anstelle von KeyError bei fehlenden Schriftarten aus.

  • Dvi.baseline ist veraltet (ohne Ersatz).

  • Der Parameter format von dviread.find_tex_file ist veraltet (ohne Ersatz).

  • FancyArrowPatch.get_path_in_displaycoord und ConnectionPath.get_path_in_displaycoord sind veraltet. Der Pfad in Anzeigekoordinaten kann immer noch, wie bei anderen Patches, über patch.get_transform().transform_path(patch.get_path()) erhalten werden.

  • Die Hilfsfunktionen font_manager.win32InstalledFonts und font_manager.get_fontconfig_fonts sind veraltet.

  • Alle Parameter von imshow ab aspect werden schlüsselwortgesteuert.

  • QuadMesh.convert_mesh_to_paths und QuadMesh.convert_mesh_to_triangles sind veraltet. QuadMesh.get_paths() kann als Alternative für erstgenanntes verwendet werden; für letzteres gibt es keinen Ersatz.

  • ScalarMappable.callbacksSM ist veraltet. Verwenden Sie stattdessen ScalarMappable.callbacks.

  • streamplot.get_integrator ist veraltet.

  • style.core.STYLE_FILE_PATTERN, style.core.load_base_library und style.core.iter_user_libraries sind veraltet.

  • SubplotParams.validate ist veraltet. Verwenden Sie SubplotParams.update, um SubplotParams zu ändern und es dabei immer in einem gültigen Zustand zu halten.

  • Die Attribute grey_arrayd, font_family, font_families und font_info von TexManager sind veraltet.

  • Text.get_prop_tup ist ohne Ersatz veraltet (da die Klasse Text nicht wissen kann, ob ein Backend den Cache aktualisieren muss, z. B. wenn sich die Farbe des Textes ändert).

  • Tick.apply_tickdir hat die Tick-Marker auf den vorhandenen Line2D-Objekten, die zum Zeichnen der Ticks verwendet werden, nicht tatsächlich aktualisiert und ist veraltet; verwenden Sie stattdessen Axis.set_tick_params.

  • tight_layout.auto_adjust_subplotpars ist veraltet.

  • Das Attribut grid_info von axisartist-Klassen ist veraltet.

  • axisartist.clip_path ist ohne Ersatz veraltet.

  • axes_grid1.axes_grid.CbarAxes und axes_grid1.axisartist.CbarAxes sind veraltet (sie werden nun dynamisch basierend auf der besitzenden Achsenklasse generiert).

  • Die Methoden axes_grid1.Divider.get_vsize_hsize und axes_grid1.Grid.get_vsize_hsize sind veraltet. Kopieren Sie ihre Implementierungen, falls erforderlich.

  • AxesDivider.append_axes(..., add_to_figure=False) ist veraltet. Verwenden Sie ax.remove(), um die Achsen bei Bedarf aus der Figur zu entfernen.

  • FixedAxisArtistHelper.change_tick_coord ist ohne Ersatz veraltet.

  • floating_axes.GridHelperCurveLinear.get_boundary ist veraltet, ohne Ersatz.

  • ParasiteAxesBase.get_images_artists ist veraltet.

  • Das Signal "units finalize" (früher von Axis-Instanzen emittiert) ist veraltet. Verbinden Sie stattdessen mit "units".

  • Das positionsgebundene Übergeben von Formatierungsparametern an stem() ist veraltet

Veralterungen der plot_directive#

Die Option :encoding: für die Direktive .. plot hatte seit Matplotlib 1.3.1 keine Wirkung mehr und ist nun veraltet.

Die folgenden Helfer in matplotlib.sphinxext.plot_directive sind veraltet

Testunterstützung#

matplotlib.test() ist veraltet#

Führen Sie Tests stattdessen mit pytest von der Befehlszeile aus. Die Variable matplotlib.default_test_modules wird nur für matplotlib.test() verwendet und ist daher ebenfalls veraltet.

Um eine installierte Kopie zu testen, stellen Sie sicher, dass sowohl matplotlib als auch mpl_toolkits mit --pyargs angegeben werden.

pytest --pyargs matplotlib.tests mpl_toolkits.tests

Weitere Einzelheiten finden Sie unter Testing.

Unbenutzte Pytest-Fixtures und Marker#

Das Fixture matplotlib.testing.conftest.mpl_image_comparison_parameters wird intern von Matplotlib nicht verwendet. Wenn Sie dies verwenden, kopieren Sie es bitte in Ihre Codebasis.

Der Marker @pytest.mark.style ist veraltet; verwenden Sie stattdessen @mpl.style.context, was die gleiche Wirkung hat.

Unterstützung für nx1 = None oder ny1 = None in AxesLocator und Divider.locate#

In axes_grid1.axes_divider werden verschiedene interne APIs die Übergabe von nx1 = None oder ny1 = None zur Bedeutung von nx + 1 oder ny + 1 nicht mehr unterstützen. Dies geschieht in Vorbereitung auf eine mögliche zukünftige API, die Indizierung und Slicing von Divisoren erlaubt (möglicherweise divider[a:b] == divider.new_locator(a, b), aber auch divider[a:] == divider.new_locator(a, <end>)). Die Benutzeroberfläche Divider.new_locator ist davon unberührt – sie normalisiert nx1 = None und ny1 = None bei Bedarf korrekt.

Entfernungen#

Die folgenden veralteten APIs wurden entfernt

Entferntes Verhalten#

Strengere Validierung von Funktionsparametern#

  • Der Aufruf von Figure.add_axes ohne Argumente löst einen Fehler aus. Das Hinzufügen einer frei schwebenden Achse benötigt ein Positionsrechteck. Wenn Sie eine die gesamte Figur ausfüllende einzelne Achse wünschen, verwenden Sie stattdessen Figure.add_subplot.

  • Figure.add_subplot validiert seine Eingaben; insbesondere müssen für add_subplot(rows, cols, index) alle Parameter ganzzahlig sein. Zuvor wurden Zeichenketten und Gleitkommazahlen akzeptiert und in int konvertiert.

  • Das Übergeben von None als which-Argument an autofmt_xdate wird nicht mehr unterstützt; verwenden Sie stattdessen dessen expliziteres Synonym which="major".

  • Das Setzen der orientation eines eventplot() oder EventCollection auf "none" oder None wird nicht mehr unterstützt; setzen Sie es stattdessen auf "horizontal". Darüber hinaus sind die beiden Orientierungen ("horizontal" und "vertical") nun case-sensitiv.

  • Das gleichzeitige Übergeben der Parameter norm und vmin/vmax an Funktionen, die Colormapping verwenden (wie z. B. scatter() und imshow()), wird nicht mehr unterstützt. Anstelle von norm=LogNorm(), vmin=min_val, vmax=max_val übergeben Sie norm=LogNorm(min_val, max_val). vmin und vmax sollten nur ohne Angabe von norm verwendet werden.

  • Das Übergeben von None als Argument radius oder startangle eines Axes.pie wird nicht mehr akzeptiert; verwenden Sie stattdessen die expliziten Standardwerte 1 bzw. 0.

  • Das Übergeben von None als Argument normalize von Axes.pie (der frühere Standard) wird nicht mehr akzeptiert, und der Kuchen wird standardmäßig immer normalisiert. Wenn Sie einen unvollständigen Kuchen plotten möchten, übergeben Sie explizit normalize=False.

  • Die Unterstützung für das Übergeben von None an subplot_class_factory wurde entfernt. Übergeben Sie stattdessen explizit die Basisklasse Axes.

  • Das Übergeben mehrerer Schlüssel als einzelne kommagetrennte Zeichenkette oder mehrerer Argumente an ToolManager.update_keymap wird nicht mehr unterstützt; übergeben Sie Schlüssel stattdessen als Liste von Zeichenketten.

  • Das Übergeben des Dash-Offsets als None wird nicht mehr akzeptiert, da dies nie universell implementiert war, z. B. für Vektorausgabe. Setzen Sie den Offset stattdessen auf 0.

  • Das Setzen einer benutzerdefinierten Methode, die Artist.contains überschreibt, mit Artist.set_contains wurde entfernt, ebenso wie Artist.get_contains. Es gibt keinen Ersatz, aber Sie können Pick-Ereignisse weiterhin mit Artist.set_picker anpassen.

  • semilogx, semilogy, loglog, LogScale und SymmetricalLogScale verwendeten früher Schlüsselwortargumente, die von der Achsenorientierung abhingen ("basex" vs "basey", "subsx" vs "subsy", "nonposx" vs "nonposy"); diese Parameternamen wurden zugunsten von "base", "subs", "nonpositive" entfernt. Diese Entfernung betrifft auch z. B. ax.set_yscale("log", basey=...), was nun ax.set_yscale("log", base=...) geschrieben werden muss.

    Die Umstellung von "nonpos" auf "nonpositive" betrifft auch LogTransform, InvertedLogTransform, SymmetricalLogTransform usw.

    Um unterschiedliche Basen für die x-Achse und die y-Achse eines loglog-Plots zu verwenden, verwenden Sie z. B. ax.set_xscale("log", base=10); ax.set_yscale("log", base=2).

  • Das Übergeben von None oder keinem Argument an parasite_axes_class_factory, parasite_axes_auxtrans_class_factory, host_axes_class_factory wird nicht mehr akzeptiert; übergeben Sie stattdessen explizit eine Basisklasse.

Groß-/Kleinschreibung wird nun stärker erzwungen#

  • Groß- oder gemischtsprachige Eigenschaftsnamen werden in Artist.set und Artist.update nicht mehr automatisch in Kleinbuchstaben umgewandelt. Dies ermöglicht die Übergabe von Namen wie patchA oder UVC.

  • Groß-/Kleinschreibung-unempfindliche capstyles und joinstyles werden nicht mehr in Kleinbuchstaben umgewandelt; bitte übergeben Sie capstyles ("miter", "round", "bevel") und joinstyles ("butt", "round", "projecting") in Kleinbuchstaben.

  • Das Speichern von Metadaten in PDF mit dem PGF-Backend ändert die Schlüssel nicht mehr in Kleinbuchstaben. Nur die kanonisch groß-/kleingeschriebenen Schlüssel, die in der PDF-Spezifikation (und der Dokumentation von PdfPages) aufgeführt sind, werden akzeptiert.

Keine implizite Initialisierung von Tick-Attributen#

Der Konstruktor Tick initialisiert die Attribute tick1line, tick2line, gridline, label1 und label2 nicht mehr über _get_tick1line, _get_tick2line, _get_gridline, _get_text1 und _get_text2. Bitte setzen Sie das Attribut direkt im __init__ der Unterklasse.

Entfernung alter Dateimodus-Flags#

Flags, die "U" enthalten und an cbook.to_filehandle und cbook.open_file_cm übergeben werden, werden nicht mehr akzeptiert. Dies entspricht ihrer Entfernung aus open in Python 3.9.

Keymaps zum Umschalten von Axes.get_navigate wurden entfernt#

Dies schließt numerische Tastenereignisse und rcParams ein.

Die Umgebungsvariablen TTFPATH und AFMPATH#

Die Unterstützung für die (undokumentierten) Umgebungsvariablen TTFPATH und AFMPATH wurde entfernt. Registrieren Sie zusätzliche Schriftarten mit matplotlib.font_manager.fontManager.addfont().

Module#

  • matplotlib.backends.qt_editor.formsubplottool; verwenden Sie stattdessen matplotlib.backends.backend_qt.SubplotToolQt.

  • matplotlib.compat

  • matplotlib.ttconv

  • Die Qt4-basierten Backends qt4agg und qt4cairo wurden entfernt. Qt4 hat 2015 sein End-of-Life erreicht, und es gibt keine Releases von PyQt4 oder PySide für neuere Python-Versionen. Bitte verwenden Sie eines der Qt5- oder Qt6-Backends.

Klassen, Methoden und Attribute#

Die folgenden Modul-Level-Klassen/-Variablen wurden entfernt

  • backend_bases.StatusbarBase und alle seine Unterklassen, sowie StatusBarWx; Nachrichten werden in der Symbolleiste angezeigt

  • backend_pgf.GraphicsContextPgf

  • MODIFIER_KEYS, SUPER, ALT, CTRL und SHIFT von matplotlib.backends.backend_qt5agg und matplotlib.backends.backend_qt5cairo

  • backend_wx.DEBUG_MSG

  • dviread.Encoding

  • Fil, Fill, Filll, NegFil, NegFill, NegFilll und SsGlue aus mathtext; erstellen Sie Klebeinstanzen direkt mit Glue("fil") usw.

  • mathtext.GlueSpec

  • OldScalarFormatter, IndexFormatter und IndexDateFormatter; verwenden Sie stattdessen FuncFormatter

  • OldAutoLocator

  • AVConvBase, AVConvWriter und AVConvFileWriter. Debian 8 (2015, EOL 06/2020) und Ubuntu 14.04 (EOL 04/2019) waren die letzten Versionen von Debian und Ubuntu, die avconv mitlieferten. Es ist weiterhin möglich, die Verwendung von avconv zu erzwingen, indem die auf FFmpeg basierenden Writer mit rcParams["animation.ffmpeg_path"] (Standard: 'ffmpeg') auf "avconv" gesetzt werden.

  • matplotlib.axes._subplots._subplot_classes

  • axes_grid1.axes_rgb.RGBAxesBase; verwenden Sie stattdessen RGBAxes

Die folgenden Klassenattribute wurden entfernt

  • backend_pgf.LatexManager.latex_stdin_utf8

  • backend_pgf.PdfPages.metadata

  • ContourSet.ax und Quiver.ax; verwenden Sie ContourSet.axes oder Quiver.axes, wie bei anderen Künstlern

  • DateFormatter.illegal_s

  • dates.YearLocator.replaced; YearLocator ist nun eine Unterklasse von RRuleLocator, und das Attribut YearLocator.replaced wurde entfernt. Für Tick-Positionen, die eine Änderung hier erforderten, kann stattdessen ein benutzerdefiniertes rrule und RRuleLocator verwendet werden.

  • FigureManagerBase.statusbar; Nachrichten werden in der Symbolleiste angezeigt

  • FileMovieWriter.clear_temp

  • mathtext.Glue.glue_subtype

  • MovieWriter.args_key, MovieWriter.exec_key und HTMLWriter.args_key

  • NavigationToolbar2QT.basedir; das Basisverzeichnis für die Icons ist os.path.join(mpl.get_data_path(), "images")

  • NavigationToolbar2QT.ctx

  • NavigationToolbar2QT.parent; um auf das Elternfenster zuzugreifen, verwenden Sie toolbar.canvas.parent() oder toolbar.parent()

  • prevZoomRect, retinaFix, savedRetinaImage, wxoverlay, zoomAxes, zoomStartX und zoomStartY Attribute von NavigationToolbar2Wx

  • NonUniformImage.is_grayscale, PcolorImage.is_grayscale, zur Konsistenz mit AxesImage.is_grayscale. (Beachten Sie, dass diese Attribute zuvor nur *nach dem Rendern des Bildes* verfügbar waren).

  • RendererCairo.fontweights, RendererCairo.fontangles

  • used_characters von RendererPdf, PdfFile und RendererPS

  • LogScale.LogTransform, LogScale.InvertedLogTransform, SymmetricalScale.SymmetricalTransform und SymmetricalScale.InvertedSymmetricalTransform; greifen Sie direkt auf die Transform-Klassen von matplotlib.scale zu

  • cachedir, rgba_arrayd, serif, sans_serif, cursive und monospace Attribute von TexManager

  • axleft, axright, axbottom, axtop, axwspace und axhspace Attribute von widgets.SubplotTool; greifen Sie auf das ax-Attribut des entsprechenden Sliders zu

  • widgets.TextBox.params_to_disable

  • angle_helper.LocatorBase.den; es wurde in nbins umbenannt

  • axes_grid.CbarAxesBase.cbid und axes_grid.CbarAxesBase.locator; verwenden Sie stattdessen mappable.colorbar_cid oder colorbar.locator

Die folgenden Klassenmethoden wurden entfernt

  • Axes.update_datalim_bounds; verwenden Sie ax.dataLim.set(Bbox.union([ax.dataLim, bounds]))

  • pan und zoom Methoden von Axis und Locator wurden entfernt; Panning und Zoomen werden nun über die Methoden start_pan, drag_pan und end_pan von Axes implementiert

  • .BboxBase.inverse_transformed; rufen Sie BboxBase.transformed auf dem invertierten Transform auf inverted() auf

  • Collection.set_offset_position und Collection.get_offset_position wurden entfernt; die offset_position der Klasse Collection ist nun "screen"

  • Colorbar.on_mappable_changed und Colorbar.update_bruteforce; verwenden Sie stattdessen Colorbar.update_normal()

  • docstring.Substitution.from_params wurde entfernt; weisen Sie stattdessen direkt params von docstring.Substitution zu

  • DraggableBase.artist_picker; setzen Sie stattdessen den Picker des Künstlers

  • DraggableBase.on_motion_blit; verwenden Sie stattdessen DraggableBase.on_motion

  • FigureCanvasGTK3._renderer_init

  • Locator.refresh() und die zugehörigen Hilfsmethoden NavigationToolbar2.draw() und ToolViewsPositions.refresh_locators()

  • track_characters und merge_used_characters von RendererPdf, PdfFile und RendererPS

  • RendererWx.get_gc

  • SubplotSpec.get_rows_columns; verwenden Sie stattdessen die Eigenschaften GridSpec.nrows, GridSpec.ncols, SubplotSpec.rowspan und SubplotSpec.colspan.

  • ScalarMappable.update_dict, ScalarMappable.add_checker() und ScalarMappable.check_update(); registrieren Sie einen Callback in ScalarMappable.callbacks, um über Updates benachrichtigt zu werden

  • TexManager.make_tex_preview und TexManager.make_dvi_preview

  • funcleft, funcright, funcbottom, functop, funcwspace und funchspace Methoden von widgets.SubplotTool

  • axes_grid1.axes_rgb.RGBAxes.add_RGB_to_figure

  • axisartist.axis_artist.AxisArtist.dpi_transform

  • axisartist.grid_finder.MaxNLocator.set_factor und axisartist.grid_finder.FixedLocator.set_factor; der Faktor ist jetzt immer 1

Funktionen#

  • bezier.make_path_regular wurde entfernt; verwenden Sie stattdessen Path.cleaned() (oder Path.cleaned(curves=True) usw.), aber beachten Sie, dass diese Methoden einen STOP-Code am Ende des Pfades hinzufügen.

  • bezier.concatenate_paths wurde entfernt; verwenden Sie stattdessen Path.make_compound_path().

  • cbook.local_over_kwdict wurde entfernt; verwenden Sie stattdessen cbook.normalize_kwargs.

  • qt_compat.is_pyqt5 wurde aufgrund der Veröffentlichung von PyQt6 entfernt. Die Qt-Version kann mit QtCore.qVersion() überprüft werden.

  • testing.compare.make_external_conversion_command wurde entfernt.

  • axes_grid1.axes_rgb.imshow_rgb wurde entfernt; verwenden Sie stattdessen imshow(np.dstack([r, g, b])).

Argumente#

  • Der Parameter s für Axes.annotate und pyplot.annotate wird nicht mehr unterstützt; verwenden Sie den neuen Namen text.

  • Der Parameter inframe für matplotlib.axes.Axes.draw wurde entfernt; verwenden Sie stattdessen Axes.redraw_in_frame.

  • Die Parameter required, forbidden und allowed von cbook.normalize_kwargs wurden entfernt.

  • Der Parameter ismath der Methode draw_tex aller Renderer-Klassen wurde entfernt (da ein Aufruf von draw_tex – nicht zu verwechseln mit draw_text! – bedeutet, dass die gesamte Zeichenkette sowieso an die usetex-Maschinerie übergeben werden sollte). Ebenso wird die Text-Maschinerie den Parameter ismath nicht mehr übergeben, wenn sie draw_tex aufruft (dies sollte nur für Backend-Implementierer relevant sein).

  • Die Parameter quality, optimize und progressive von Figure.savefig (die nur JPEG-Ausgaben beeinflussten) wurden entfernt, ebenso wie aus den entsprechenden print_jpg-Methoden. JPEG-Ausgabeoptionen können durch direkte Übergabe der relevanten Parameter in pil_kwargs eingestellt werden.

  • Der Parameter clear_temp von FileMovieWriter wurde entfernt; Dateien, die in einem temporären Verzeichnis abgelegt werden (mit frame_prefix=None, dem Standardwert), werden gelöscht; Dateien, die woanders abgelegt werden, nicht.

  • Der Parameter copy von mathtext.Glue wurde entfernt.

  • Der Parameter quantize von Path.cleaned() wurde entfernt.

  • Der Parameter dummy von RendererPgf wurde entfernt.

  • Der Parameter props von Shadow wurde entfernt; verwenden Sie stattdessen Schlüsselwortargumente.

  • Der Parameter recursionlimit von matplotlib.test wurde entfernt.

  • Der Parameter label von Tick hat keine Auswirkung und wurde entfernt.

  • MaxNLocator akzeptiert nicht mehr gleichzeitig einen Positions- und einen Schlüsselwortparameter nbins, da sie dieselbe Größe angeben.

  • Die Parameter add_all für axes_grid.Grid, axes_grid.ImageGrid, axes_rgb.make_rgb_axes und axes_rgb.RGBAxes wurden entfernt; die APIs verhalten sich immer so, als ob add_all=True wäre.

  • Der Parameter den von axisartist.angle_helper.LocatorBase wurde entfernt; verwenden Sie stattdessen nbins.

  • Das Schlüsselwortargument s für AnnotationBbox.get_fontsize hat keine Auswirkung und wurde entfernt.

  • Das Schlüsselwortargument offset_position der Klasse Collection wurde entfernt; die offset_position ist nun "screen".

  • Beliebige Schlüsselwortargumente für StreamplotSet haben keine Auswirkung und wurden entfernt.

  • Die Parameter fontdict und minor von Axes.set_xticklabels / Axes.set_yticklabels sind nun nur noch als Schlüsselwortargumente zulässig.

  • Alle Parameter von Figure.subplots außer nrows und ncols sind nun nur noch als Schlüsselwortargumente zulässig; dies vermeidet die Eingabe von z. B. subplots(1, 1, 1), wenn subplot(1, 1, 1) gemeint ist, aber tatsächlich subplots(1, 1, sharex=1) erhalten wird.

  • Alle Parameter von pyplot.tight_layout sind nun nur noch als Schlüsselwortargumente zulässig, um mit Figure.tight_layout konsistent zu sein.

  • ColorbarBase nimmt jetzt nur noch ein einziges Positionsargument entgegen, die Axes, in der sie erstellt werden soll, wobei alle anderen Optionen als Schlüsselwortargumente erforderlich sind. Die Warnung für Schlüsselwortargumente, die durch die mappable überschrieben wurden, ist nun entfernt.

  • Das Weglassen des Parameters renderer für matplotlib.axes.Axes.draw ist nicht mehr zulässig; verwenden Sie stattdessen axes.draw_artist(axes).

  • Das Übergeben von ismath="TeX!" an RendererAgg.get_text_width_height_descent ist nicht mehr zulässig; übergeben Sie stattdessen ismath="TeX",

  • Änderungen an der Signatur der Methode matplotlib.axes.Axes.draw machen sie konsistent mit allen anderen Künstlern; somit wurden auch zusätzliche Parameter für Artist.draw entfernt.

rcParams#

  • Die rcParams animation.avconv_path und animation.avconv_args wurden entfernt.

  • Die rcParam animation.html_args wurde entfernt.

  • Die rcParam keymap.all_axes wurde entfernt.

  • Die rcParam mathtext.fallback_to_cm wurde entfernt. Verwenden Sie stattdessen rcParams["mathtext.fallback"] (Standard: 'cm').

  • Die rcParam savefig.jpeg_quality wurde entfernt.

  • Die rcParam text.latex.preview wurde entfernt.

  • Die folgenden veralteten rcParams-Validatoren, definiert in rcsetup, wurden entfernt

    • validate_alignment

    • validate_axes_titlelocation

    • validate_axis_locator

    • validate_bool_maybe_none

    • validate_fontset

    • validate_grid_axis

    • validate_hinting

    • validate_legend_loc

    • validate_mathtext_default

    • validate_movie_frame_fmt

    • validate_movie_html_fmt

    • validate_movie_writer

    • validate_nseq_float

    • validate_nseq_int

    • validate_orientation

    • validate_pgf_texsystem

    • validate_ps_papersize

    • validate_svg_fonttype

    • validate_toolbar

    • validate_webagg_address

  • Einige rcParam-Validierungen sind strenger geworden

    • rcParams["axes.axisbelow"] (Standard: 'line') akzeptiert keine Zeichenketten mehr, die mit "line" beginnen (Groß-/Kleinschreibung wird nicht beachtet), als "line"; verwenden Sie stattdessen "line" (Groß-/Kleinschreibung wird beachtet).

    • rcParams["text.latex.preamble"] (Standard: '') und pdf.preamble akzeptieren keine Nicht-Zeichenketten-Werte mehr.

    • Alle *.linestyle rcParams akzeptieren offset = None nicht mehr; setzen Sie den Offset stattdessen auf 0.

Entwicklungsänderungen

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

Für Matplotlib 3.5 werden die minimal unterstützten Versionen und einige optionale Abhängigkeiten angehoben

Abhängigkeit

min in mpl3.4

min in mpl3.5

NumPy

1.16

1.17

Tk (optional)

8.3

8.4

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

Neue Wheel-Architekturen#

Wheels wurden hinzugefügt für

  • Python 3.10

  • PyPy 3.7

  • macOS auf Apple Silicon (sowohl arm64 als auch universal2)

Neue Build-Abhängigkeiten#

Die Versionierung wurde von gebündeltem versioneer auf setuptools-scm mit dem release-branch-semver-Versionsschema umgestellt. Letzteres ist gut gepflegt, erfordert aber möglicherweise geringfügige Anpassungen der Paketierungsskripte.

Das Plugin setuptools-scm-git-archive wird ebenfalls für den konsistenten Versions-Export verwendet.

Datenverzeichnis ist nicht mehr optional#

Historisch gesehen war das Verzeichnis mpl-data optional (Beispieldateien waren unnötig und Schriften konnten gelöscht werden, wenn eine geeignete Abhängigkeit zu einer Systemschrift bereitgestellt wurde). Obwohl Beispieldateien immer noch optional sind, wurden sie erheblich reduziert und wir betrachten das Verzeichnis nun als erforderlich.

Insbesondere die Datei matplotlibrc, die sich dort befindet, wird für Laufzeitprüfungen verwendet und muss existieren. Packager können Schriften bei Bedarf weiterhin per Symlink zu Systemversionen verknüpfen.

Neue Laufzeitabhängigkeiten#

fontTools für Type 42-Subsetting#

Eine neue Abhängigkeit fontTools wird in Matplotlib 3.5 integriert. Sie ist für die Verwendung mit PS/EPS- und PDF-Dokumenten konzipiert und kümmert sich um das Type 42-Font-Subsetting.

Unterstrichunterstützung in LaTeX#

Das Paket underscore ist nun eine Voraussetzung, um die Unterstützung für Unterstriche in LaTeX zu verbessern.

Dies entspricht unserer Richtlinie für minimale Abhängigkeiten.

Matplotlib-spezifische Build-Optionen von setup.cfg nach mplsetup.cfg verschoben#

Um Konflikte mit der Verwendung von setup.cfg durch setuptools zu vermeiden, wurden die Matplotlib-spezifischen Build-Optionen von setup.cfg nach mplsetup.cfg verschoben. setup.cfg.template wurde entsprechend in mplsetup.cfg.template umbenannt.

Beachten Sie, dass der Pfad zu dieser Konfigurationsdatei weiterhin über die Umgebungsvariable MPLSETUPCFG gesetzt werden kann, was es ermöglicht, dieselbe Datei vor und nach dieser Änderung zu verwenden.