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.artistsAxes.collectionsAxes.imagesAxes.linesAxes.patchesAxes.tablesAxes.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.artistsAxes.collectionsAxes.imagesAxes.linesAxes.patchesAxes.tablesAxes.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
datetimesollten direkt mitplotgeplottet werden.Wenn Sie numerische Daten als Matplotlib-Datumsformat plotten oder eine Zeitzone festlegen müssen, rufen Sie
ax.xaxis.axis_date/ax.yaxis.axis_datevorplotauf. SieheAxis.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_handlewurde privatisiert und veraltet.Das Attribut
drawtypewurde privatisiert und veraltet.Das Attribut
eventpresswurde privatisiert und veraltet.Das Attribut
eventreleasewurde privatisiert und veraltet.Das Attribut
interactivewurde 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
rectpropswurde privatisiert und veraltet.Das Attribut
statewurde privatisiert und veraltet.Das Attribut
to_drawwurde 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_propsoderset_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_handlewurde privatisiert und veraltet.Das Attribut
eventpresswurde privatisiert und veraltet.Das Attribut
eventreleasewurde privatisiert und veraltet.Das Argument und Attribut maxdist ist veraltet, verwenden Sie stattdessen grab_range.
Das Attribut
pressvwurde privatisiert und veraltet.Das Attribut
prevwurde privatisiert und veraltet.Das Attribut
rectwurde privatisiert und veraltet.Das Argument rectprops ist veraltet, verwenden Sie stattdessen props.
Das Attribut
rectpropswurde privatisiert und veraltet.Das Argument span_stays ist veraltet, verwenden Sie stattdessen das Argument interactive.
Das Attribut
span_stayswurde privatisiert und veraltet.Das Attribut
statewurde privatisiert und veraltet.
LassoSelector#
Das Argument lineprops ist veraltet, verwenden Sie stattdessen props.
Die Methoden
onpressundonreleasesind veraltet. Sie sind direkte Aliase fürpressundrelease.
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.SetCursorGTK3matplotlib.backends.backend_qt5.SetCursorQtmatplotlib.backends._backend_tk.SetCursorTkmatplotlib.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_urlundURL_REGEXsind veraltet. (Sie wurden zuvor im Top-Level-Modulmatplotlibdefiniert.)Die Attribute
ArrowStyle.beginarrowundArrowStyle.endarrowsind veraltet; verwenden Sie stattdessen das Attributarrow, um die gewünschten Spitzen und Enden des Pfeils zu definieren.backend_pgf.LatexManager.str_cacheist veraltet.backends.qt_compat.ETSundbackends.qt_compat.QT_RC_MAJOR_VERSIONsind veraltet, ohne Ersatz.Das Modul
blocking_inputist veraltet. Verwenden Sie stattdessencanvas.start_event_loop()undcanvas.stop_event_loop(), während Sie bei Bedarf Ereignis-Callbacks verbinden.cbook.report_memoryist veraltet; verwenden Sie stattdessenpsutil.virtual_memory.cm.LUTSIZEist veraltet. Verwenden Sie stattdessenrcParams["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 SieCollection.set_offset_transformexplizit auf.Colorbar.patchist veraltet; dieses Attribut wird nicht mehr korrekt aktualisiert.ContourLabeler.get_label_widthist veraltet.dviread.PsfontsMaplöst jetzt LookupError anstelle von KeyError bei fehlenden Schriftarten aus.Dvi.baselineist veraltet (ohne Ersatz).Der Parameter format von
dviread.find_tex_fileist veraltet (ohne Ersatz).FancyArrowPatch.get_path_in_displaycoordundConnectionPath.get_path_in_displaycoordsind veraltet. Der Pfad in Anzeigekoordinaten kann immer noch, wie bei anderen Patches, überpatch.get_transform().transform_path(patch.get_path())erhalten werden.Die Hilfsfunktionen
font_manager.win32InstalledFontsundfont_manager.get_fontconfig_fontssind veraltet.Alle Parameter von
imshowab aspect werden schlüsselwortgesteuert.QuadMesh.convert_mesh_to_pathsundQuadMesh.convert_mesh_to_trianglessind veraltet.QuadMesh.get_paths()kann als Alternative für erstgenanntes verwendet werden; für letzteres gibt es keinen Ersatz.ScalarMappable.callbacksSMist veraltet. Verwenden Sie stattdessenScalarMappable.callbacks.streamplot.get_integratorist veraltet.style.core.STYLE_FILE_PATTERN,style.core.load_base_libraryundstyle.core.iter_user_librariessind veraltet.SubplotParams.validateist veraltet. Verwenden SieSubplotParams.update, umSubplotParamszu ändern und es dabei immer in einem gültigen Zustand zu halten.Die Attribute
grey_arrayd,font_family,font_familiesundfont_infovonTexManagersind veraltet.Text.get_prop_tupist ohne Ersatz veraltet (da die KlasseTextnicht wissen kann, ob ein Backend den Cache aktualisieren muss, z. B. wenn sich die Farbe des Textes ändert).Tick.apply_tickdirhat die Tick-Marker auf den vorhandenen Line2D-Objekten, die zum Zeichnen der Ticks verwendet werden, nicht tatsächlich aktualisiert und ist veraltet; verwenden Sie stattdessenAxis.set_tick_params.tight_layout.auto_adjust_subplotparsist veraltet.Das Attribut
grid_infovonaxisartist-Klassen ist veraltet.axisartist.clip_pathist ohne Ersatz veraltet.axes_grid1.axes_grid.CbarAxesundaxes_grid1.axisartist.CbarAxessind veraltet (sie werden nun dynamisch basierend auf der besitzenden Achsenklasse generiert).Die Methoden
axes_grid1.Divider.get_vsize_hsizeundaxes_grid1.Grid.get_vsize_hsizesind veraltet. Kopieren Sie ihre Implementierungen, falls erforderlich.AxesDivider.append_axes(..., add_to_figure=False)ist veraltet. Verwenden Sieax.remove(), um die Achsen bei Bedarf aus der Figur zu entfernen.FixedAxisArtistHelper.change_tick_coordist ohne Ersatz veraltet.floating_axes.GridHelperCurveLinear.get_boundaryist veraltet, ohne Ersatz.ParasiteAxesBase.get_images_artistsist 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
unescape_doctest(verwenden Sie stattdessendoctest.script_from_examples),split_code_at_show,run_code.
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_axesohne 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 stattdessenFigure.add_subplot.Figure.add_subplotvalidiert seine Eingaben; insbesondere müssen füradd_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_xdatewird nicht mehr unterstützt; verwenden Sie stattdessen dessen expliziteres Synonymwhich="major".Das Setzen der orientation eines
eventplot()oderEventCollectionauf "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()undimshow()), wird nicht mehr unterstützt. Anstelle vonnorm=LogNorm(), vmin=min_val, vmax=max_valübergeben Sienorm=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.piewird 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 explizitnormalize=False.Die Unterstützung für das Übergeben von None an
subplot_class_factorywurde entfernt. Übergeben Sie stattdessen explizit die BasisklasseAxes.Das Übergeben mehrerer Schlüssel als einzelne kommagetrennte Zeichenkette oder mehrerer Argumente an
ToolManager.update_keymapwird 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, mitArtist.set_containswurde entfernt, ebenso wieArtist.get_contains. Es gibt keinen Ersatz, aber Sie können Pick-Ereignisse weiterhin mitArtist.set_pickeranpassen.semilogx,semilogy,loglog,LogScaleundSymmetricalLogScaleverwendeten 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 nunax.set_yscale("log", base=...)geschrieben werden muss.Die Umstellung von "nonpos" auf "nonpositive" betrifft auch
LogTransform,InvertedLogTransform,SymmetricalLogTransformusw.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_factorywird nicht mehr akzeptiert; übergeben Sie stattdessen explizit eine Basisklasse.
Groß-/Kleinschreibung wird nun stärker erzwungen#
Groß- oder gemischtsprachige Eigenschaftsnamen werden in
Artist.setundArtist.updatenicht 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.
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 stattdessenmatplotlib.backends.backend_qt.SubplotToolQt.matplotlib.compatmatplotlib.ttconvDie Qt4-basierten Backends
qt4aggundqt4cairowurden 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.StatusbarBaseund alle seine Unterklassen, sowieStatusBarWx; Nachrichten werden in der Symbolleiste angezeigtbackend_pgf.GraphicsContextPgfMODIFIER_KEYS,SUPER,ALT,CTRLundSHIFTvonmatplotlib.backends.backend_qt5aggundmatplotlib.backends.backend_qt5cairobackend_wx.DEBUG_MSGdviread.EncodingFil,Fill,Filll,NegFil,NegFill,NegFilllundSsGlueausmathtext; erstellen Sie Klebeinstanzen direkt mitGlue("fil")usw.mathtext.GlueSpecOldScalarFormatter,IndexFormatterundIndexDateFormatter; verwenden Sie stattdessenFuncFormatterOldAutoLocatorAVConvBase,AVConvWriterundAVConvFileWriter. 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 mitrcParams["animation.ffmpeg_path"](Standard:'ffmpeg') auf "avconv" gesetzt werden.matplotlib.axes._subplots._subplot_classesaxes_grid1.axes_rgb.RGBAxesBase; verwenden Sie stattdessenRGBAxes
Die folgenden Klassenattribute wurden entfernt
backend_pgf.LatexManager.latex_stdin_utf8backend_pgf.PdfPages.metadataContourSet.axundQuiver.ax; verwenden SieContourSet.axesoderQuiver.axes, wie bei anderen KünstlernDateFormatter.illegal_sdates.YearLocator.replaced;YearLocatorist nun eine Unterklasse vonRRuleLocator, und das AttributYearLocator.replacedwurde entfernt. Für Tick-Positionen, die eine Änderung hier erforderten, kann stattdessen ein benutzerdefiniertes rrule undRRuleLocatorverwendet werden.FigureManagerBase.statusbar; Nachrichten werden in der Symbolleiste angezeigtFileMovieWriter.clear_tempmathtext.Glue.glue_subtypeMovieWriter.args_key,MovieWriter.exec_keyundHTMLWriter.args_keyNavigationToolbar2QT.basedir; das Basisverzeichnis für die Icons istos.path.join(mpl.get_data_path(), "images")NavigationToolbar2QT.ctxNavigationToolbar2QT.parent; um auf das Elternfenster zuzugreifen, verwenden Sietoolbar.canvas.parent()odertoolbar.parent()prevZoomRect,retinaFix,savedRetinaImage,wxoverlay,zoomAxes,zoomStartXundzoomStartYAttribute vonNavigationToolbar2WxNonUniformImage.is_grayscale,PcolorImage.is_grayscale, zur Konsistenz mitAxesImage.is_grayscale. (Beachten Sie, dass diese Attribute zuvor nur *nach dem Rendern des Bildes* verfügbar waren).RendererCairo.fontweights,RendererCairo.fontanglesused_charactersvonRendererPdf,PdfFileundRendererPSLogScale.LogTransform,LogScale.InvertedLogTransform,SymmetricalScale.SymmetricalTransformundSymmetricalScale.InvertedSymmetricalTransform; greifen Sie direkt auf die Transform-Klassen vonmatplotlib.scalezucachedir,rgba_arrayd,serif,sans_serif,cursiveundmonospaceAttribute vonTexManageraxleft,axright,axbottom,axtop,axwspaceundaxhspaceAttribute vonwidgets.SubplotTool; greifen Sie auf dasax-Attribut des entsprechenden Sliders zuwidgets.TextBox.params_to_disableangle_helper.LocatorBase.den; es wurde in nbins umbenanntaxes_grid.CbarAxesBase.cbidundaxes_grid.CbarAxesBase.locator; verwenden Sie stattdessenmappable.colorbar_cidodercolorbar.locator
Die folgenden Klassenmethoden wurden entfernt
Axes.update_datalim_bounds; verwenden Sieax.dataLim.set(Bbox.union([ax.dataLim, bounds]))panundzoomMethoden vonAxisundLocatorwurden entfernt; Panning und Zoomen werden nun über die Methodenstart_pan,drag_panundend_panvonAxesimplementiert.BboxBase.inverse_transformed; rufen SieBboxBase.transformedauf dem invertierten Transform aufinverted()aufCollection.set_offset_positionundCollection.get_offset_positionwurden entfernt; dieoffset_positionder KlasseCollectionist nun "screen"Colorbar.on_mappable_changedundColorbar.update_bruteforce; verwenden Sie stattdessenColorbar.update_normal()docstring.Substitution.from_paramswurde entfernt; weisen Sie stattdessen direktparamsvondocstring.SubstitutionzuDraggableBase.artist_picker; setzen Sie stattdessen den Picker des KünstlersDraggableBase.on_motion_blit; verwenden Sie stattdessenDraggableBase.on_motionFigureCanvasGTK3._renderer_initLocator.refresh()und die zugehörigen HilfsmethodenNavigationToolbar2.draw()undToolViewsPositions.refresh_locators()track_charactersundmerge_used_charactersvonRendererPdf,PdfFileundRendererPSRendererWx.get_gcSubplotSpec.get_rows_columns; verwenden Sie stattdessen die EigenschaftenGridSpec.nrows,GridSpec.ncols,SubplotSpec.rowspanundSubplotSpec.colspan.ScalarMappable.update_dict,ScalarMappable.add_checker()undScalarMappable.check_update(); registrieren Sie einen Callback inScalarMappable.callbacks, um über Updates benachrichtigt zu werdenTexManager.make_tex_previewundTexManager.make_dvi_previewfuncleft,funcright,funcbottom,functop,funcwspaceundfunchspaceMethoden vonwidgets.SubplotToolaxes_grid1.axes_rgb.RGBAxes.add_RGB_to_figureaxisartist.axis_artist.AxisArtist.dpi_transformaxisartist.grid_finder.MaxNLocator.set_factorundaxisartist.grid_finder.FixedLocator.set_factor; der Faktor ist jetzt immer 1
Funktionen#
bezier.make_path_regularwurde entfernt; verwenden Sie stattdessenPath.cleaned()(oderPath.cleaned(curves=True)usw.), aber beachten Sie, dass diese Methoden einenSTOP-Code am Ende des Pfades hinzufügen.bezier.concatenate_pathswurde entfernt; verwenden Sie stattdessenPath.make_compound_path().cbook.local_over_kwdictwurde entfernt; verwenden Sie stattdessencbook.normalize_kwargs.qt_compat.is_pyqt5wurde aufgrund der Veröffentlichung von PyQt6 entfernt. Die Qt-Version kann mitQtCore.qVersion()überprüft werden.testing.compare.make_external_conversion_commandwurde entfernt.axes_grid1.axes_rgb.imshow_rgbwurde entfernt; verwenden Sie stattdessenimshow(np.dstack([r, g, b])).
Argumente#
Der Parameter s für
Axes.annotateundpyplot.annotatewird nicht mehr unterstützt; verwenden Sie den neuen Namen text.Der Parameter inframe für
matplotlib.axes.Axes.drawwurde entfernt; verwenden Sie stattdessenAxes.redraw_in_frame.Die Parameter required, forbidden und allowed von
cbook.normalize_kwargswurden entfernt.Der Parameter ismath der Methode
draw_texaller Renderer-Klassen wurde entfernt (da ein Aufruf vondraw_tex– nicht zu verwechseln mitdraw_text! – bedeutet, dass die gesamte Zeichenkette sowieso an dieusetex-Maschinerie übergeben werden sollte). Ebenso wird die Text-Maschinerie den Parameter ismath nicht mehr übergeben, wenn siedraw_texaufruft (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 entsprechendenprint_jpg-Methoden. JPEG-Ausgabeoptionen können durch direkte Übergabe der relevanten Parameter in pil_kwargs eingestellt werden.Der Parameter clear_temp von
FileMovieWriterwurde entfernt; Dateien, die in einem temporären Verzeichnis abgelegt werden (mitframe_prefix=None, dem Standardwert), werden gelöscht; Dateien, die woanders abgelegt werden, nicht.Der Parameter copy von
mathtext.Gluewurde entfernt.Der Parameter quantize von
Path.cleaned()wurde entfernt.Der Parameter dummy von
RendererPgfwurde entfernt.Der Parameter props von
Shadowwurde entfernt; verwenden Sie stattdessen Schlüsselwortargumente.Der Parameter recursionlimit von
matplotlib.testwurde entfernt.Der Parameter label von
Tickhat keine Auswirkung und wurde entfernt.MaxNLocatorakzeptiert 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_axesundaxes_rgb.RGBAxeswurden entfernt; die APIs verhalten sich immer so, als obadd_all=Truewäre.Der Parameter den von
axisartist.angle_helper.LocatorBasewurde entfernt; verwenden Sie stattdessen nbins.Das Schlüsselwortargument s für
AnnotationBbox.get_fontsizehat keine Auswirkung und wurde entfernt.Das Schlüsselwortargument offset_position der Klasse
Collectionwurde entfernt; dieoffset_positionist nun "screen".Beliebige Schlüsselwortargumente für
StreamplotSethaben keine Auswirkung und wurden entfernt.Die Parameter fontdict und minor von
Axes.set_xticklabels/Axes.set_yticklabelssind nun nur noch als Schlüsselwortargumente zulässig.Alle Parameter von
Figure.subplotsaußer nrows und ncols sind nun nur noch als Schlüsselwortargumente zulässig; dies vermeidet die Eingabe von z. B.subplots(1, 1, 1), wennsubplot(1, 1, 1)gemeint ist, aber tatsächlichsubplots(1, 1, sharex=1)erhalten wird.Alle Parameter von
pyplot.tight_layoutsind nun nur noch als Schlüsselwortargumente zulässig, um mitFigure.tight_layoutkonsistent zu sein.ColorbarBasenimmt jetzt nur noch ein einziges Positionsargument entgegen, dieAxes, 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.drawist nicht mehr zulässig; verwenden Sie stattdessenaxes.draw_artist(axes).Das Übergeben von
ismath="TeX!"anRendererAgg.get_text_width_height_descentist nicht mehr zulässig; übergeben Sie stattdessenismath="TeX",Änderungen an der Signatur der Methode
matplotlib.axes.Axes.drawmachen sie konsistent mit allen anderen Künstlern; somit wurden auch zusätzliche Parameter fürArtist.drawentfernt.
rcParams#
Die rcParams
animation.avconv_pathundanimation.avconv_argswurden entfernt.Die rcParam
animation.html_argswurde entfernt.Die rcParam
keymap.all_axeswurde entfernt.Die rcParam
mathtext.fallback_to_cmwurde entfernt. Verwenden Sie stattdessenrcParams["mathtext.fallback"](Standard:'cm').Die rcParam
savefig.jpeg_qualitywurde entfernt.Die rcParam
text.latex.previewwurde entfernt.Die folgenden veralteten rcParams-Validatoren, definiert in
rcsetup, wurden entferntvalidate_alignmentvalidate_axes_titlelocationvalidate_axis_locatorvalidate_bool_maybe_nonevalidate_fontsetvalidate_grid_axisvalidate_hintingvalidate_legend_locvalidate_mathtext_defaultvalidate_movie_frame_fmtvalidate_movie_html_fmtvalidate_movie_writervalidate_nseq_floatvalidate_nseq_intvalidate_orientationvalidate_pgf_texsystemvalidate_ps_papersizevalidate_svg_fonttypevalidate_toolbarvalidate_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:'') undpdf.preambleakzeptieren keine Nicht-Zeichenketten-Werte mehr.Alle
*.linestylercParams akzeptierenoffset = Nonenicht 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.