API-Änderungen in 1.5.0#
Code-Änderungen#
Umkehrung von matplotlib.cbook.ls_mapper, Hinzufügen von ls_mapper_r#
Zuvor war matplotlib.cbook.ls_mapper ein Wörterbuch mit den langen Namen von Linienstilen ("solid") als Schlüssel und den Kurzformen ("-") als Werte. Diese Lang-zu-Kurz-Zuordnung wird nun von ls_mapper_r übernommen, und die Kurz-zu-Lang-Zuordnung wird von ls_mapper übernommen.
Verhindern des Verschiebens von Artists zwischen Achsen, Property-ifizierung von Artist.axes, Deprecation von Artist.{get,set}_axes#
Dies wurde getan, um zu verhindern, dass ein Artist, der bereits einer Achse zugeordnet ist, auf eine andere Achse verschoben/hinzugefügt wird. Dies wurde nie unterstützt, da es den Transformationsstapel durcheinander bringt. Die scheinbare Unterstützung dafür (da keine Ausnahme ausgelöst wurde) war die Quelle mehrerer Fehlermeldungen und Fragen auf SO.
Für fast alle Anwendungsfälle wird die Zuordnung der Achsen zu einem Artist von den Achsen selbst im Rahmen der Methode Axes.add_* übernommen, daher die Deprecation von {get,set}_axes.
Das Entfernen der Methode set_axes entfernt auch die Zeile 'axes' aus den ACCEPTS-Keyword-Tabellen (vorausgesetzt, das Entfernungsdatum liegt vor der Überarbeitung).
Verschärfte Eingabevalidierung für das 'pivot'-Keyword-Argument in quiver#
Die Validierung wurde verschärft, sodass nur {'tip', 'tail', 'mid' und 'middle'} (beliebige Groß-/Kleinschreibung) gültige Werte für das Schlüsselwortargument pivot in der Klasse Quiver (und damit für axes.Axes.quiver und pyplot.quiver, die beide vollständig an Quiver delegieren) sind. Zuvor wurde jede Eingabe, die mit 'mid.*' übereinstimmte, als 'middle' interpretiert, 'tip.*' als 'tip' und jeder String, der nicht mit einem dieser Muster übereinstimmte, als 'tail'.
Der Wert von Quiver.pivot wird in Quiver auf die Menge {'tip', 'tail', 'middle'} normalisiert.
Neuanordnung von Axes.get_children#
Die Künstlerreihenfolge, die von axes.Axes.get_children zurückgegeben wurde, stimmte nicht mit der von axes.Axes.draw verwendeten überein. Sie verwenden nun dieselbe Reihenfolge, da axes.Axes.draw nun axes.Axes.get_children aufruft.
Geändertes Verhalten von Konturplots#
Das Standardverhalten von contour() und contourf() bei Verwendung eines maskierten Arrays wird nun durch das neue Schlüsselwortargument corner_mask bestimmt, oder wenn dieses nicht angegeben ist, durch den neuen rcParams["contour.corner_mask"] (Standard: True). Das neue Standardverhalten entspricht der Verwendung von corner_mask=True; das bisherige Verhalten kann durch corner_mask=False oder durch Änderung des rcParam erzielt werden. Das Beispiel https://matplotlib.de/examples/pylab_examples/contour_corner_mask.html demonstriert den Unterschied. Die Verwendung des alten Konturalgorithmus, der mit corner_mask='legacy' erzielt wird, ist nun veraltet.
Konturbezeichnungen können nun an anderen Stellen erscheinen als in früheren Versionen von Matplotlib.
Darüber hinaus gilt das Schlüsselwortargument nchunk nun sowohl für contour() als auch für contourf(), und es teilt die Domäne in Unterdomänen von exakt nchunk mal nchunk Quads auf, während es zuvor nur ungefähr nchunk mal nchunk Quads waren.
Das C/C++-Objekt, das die Konturberechnungen durchführt, wurde früher im öffentlichen Attribut QuadContourSet.Cntr gespeichert, wird aber jetzt in einem privaten Attribut gespeichert und sollte nicht von Endbenutzern aufgerufen werden.
Hinzufügen der Funktion set_params zu allen Locator-Typen#
Dies war eine Fehlerbehebung, die darauf abzielte, die API für Locators konsistenter zu gestalten.
Im alten Verhalten hatten nur Locators vom Typ MaxNLocator set_params() definiert, was bei der Verwendung auf jedem anderen Locator zu einem AttributeError führte (Anmerkung: set_params(args) ist eine Funktion, die die Parameter einer Locator-Instanz auf die in args angegebenen setzt). Die Korrektur besteht darin, set_params() in die Locator-Klasse zu verschieben, sodass alle Untertypen diese Funktion definiert haben.
Da jeder der Locator-Untertypen seine eigenen modifizierbaren Parameter hat, ist ein universelles set_params() in Locator nicht ideal. Stattdessen wird in Locator eine standardmäßige No-Operation-Funktion implementiert, die eine Warnung auslöst. Untertypen, die Locator erweitern, überschreiben diese dann mit ihren eigenen Implementierungen. Untertypen, die keine Notwendigkeit für set_params() haben, greifen auf die Implementierung ihres Elternteils zurück, die wie beabsichtigt eine Warnung auslöst.
Im neuen Verhalten lösen Locator-Instanzen keinen AttributeError aus, wenn set_params() aufgerufen wird. Für Locators, die set_params() nicht implementieren, wird die Standardimplementierung in Locator verwendet.
Erlaubt kein None als x- oder y-Wert in ax.plot#
Erlaubt kein None als gültigen Eingabewert für die Argumente x oder y in axes.Axes.plot. Dies kann zu Problemen bei manchen Benutzer-Codes führen, war aber nie offiziell unterstützt (z.B. dokumentiert) und das Durchlassen von None-Objekten kann zu verwirrenden Ausnahmen nachgelagert führen.
Um eine leere Linie zu erstellen, verwenden Sie
ln1, = ax.plot([], [], ...)
ln2, = ax.plot([], ...)
In beiden Fällen müssen Sie sowohl die x- als auch die y-Daten aktualisieren, um die Daten im Line2D-Objekt zu aktualisieren.
Entfernt args und kwargs aus MicrosecondLocator.__call__#
Die Aufrufsignatur von matplotlib.dates.MicrosecondLocator.__call__ hat sich von __call__(self, *args, **kwargs) zu __call__(self) geändert. Dies ist konsistent mit der Oberklasse Locator und auch mit allen anderen von dieser Oberklasse abgeleiteten Locators.
Kein ValueError für MicrosecondLocator und YearLocator#
Die Objekte MicrosecondLocator und YearLocator geben beim Aufruf eine leere Liste zurück, wenn die Achsen keine Daten haben oder die Ansicht kein Intervall aufweist. Zuvor lösten sie einen ValueError aus. Dies ist konsistent mit allen Date Locators.
'OffsetBox.DrawingArea' berücksichtigt das Keyword-Argument 'clip'#
Die Aufrufsignatur war OffsetBox.DrawingArea(..., clip=True), aber das clip-Argument wurde nicht verwendet. Das Objekt führte unabhängig von diesem Parameter kein Clipping durch. Jetzt kann und wird das Objekt die Kind-Artists beschneiden, wenn diese zum Beschneiden eingestellt sind.
Sie können das Clipping für einzelne Kinder über child.set_clip_on(False) deaktivieren.
Hinzufügen von Salt zur clipPath-ID#
Salz wird zum Hash hinzugefügt, der zur Bestimmung der ID der clipPath-Knoten verwendet wird. Dies dient dazu, Konflikte zu vermeiden, wenn zwei SVG-Dokumente mit demselben Clip-Pfad im selben Dokument enthalten sind (siehe ipython/ipython#8133 und matplotlib/matplotlib#4349 ). Das bedeutet jedoch, dass die SVG-Ausgabe nicht mehr deterministisch ist, wenn dieselbe Abbildung zweimal gespeichert wird. Es wird nicht erwartet, dass dies Benutzer beeinträchtigt, da die aktuellen IDs aus einem md5-Hash der Eigenschaften des Clip-Pfads generiert werden und es für jeden Benutzer sehr schwierig wäre, den Wert der ID vorherzusagen.
Snap-Schwellenwert für Kreis-Marker auf inf geändert#
Beim Zeichnen von Kreis-Markern oberhalb einer bestimmten Markergröße (zuvor 6,0) wurde der Pfad zur Erzeugung des Markers auf Pixelzentren gesnappt. Dies verzerrt den Marker jedoch von einem Kreis weg. Durch Setzen des Snap-Schwellenwerts auf inf wird bei Kreisen nie gesnappt.
Diese Änderung hat mehrere Tests gebrochen, ist aber eine Verbesserung.
Einheiten bei Textpositionierung beibehalten#
Zuvor hat die Methode 'get_position' bei Text Einheiteninformationen entfernt, obwohl die Einheiten noch vorhanden waren. Es gab keinen inhärenten Grund dafür, daher wurde dies geändert, sodass Einheiteninformationen (falls vorhanden) erhalten bleiben. Im Wesentlichen gibt ein Aufruf von 'get_position' den exakten Wert eines Aufrufs von 'set_position' zurück.
Wenn Sie das alte Verhalten wünschen, können Sie die neue Methode 'get_unitless_position' verwenden.
Neue API für benutzerdefinierte Achsen-Ansichtsänderungen#
Interaktives Schwenken und Zoomen wurde zuvor mithilfe eines kartesisch spezifischen Algorithmus implementiert, der nicht unbedingt für benutzerdefinierte Achsen geeignet war. Drei neue private Methoden, matplotlib.axes._base._AxesBase._get_view, matplotlib.axes._base._AxesBase._set_view und matplotlib.axes._base._AxesBase._set_view_from_bbox, ermöglichen es benutzerdefinierten Achsen-Klassen, die Schwenk- und Zoom-Algorithmen zu überschreiben. Implementierer von benutzerdefinierten Achsen, die diese Methoden überschreiben, können ein geeignetes Verhalten sowohl für Schwenken und Zoomen als auch für die Navigationsschaltflächen der interaktiven Werkzeugleisten bereitstellen.
Visuelle Änderungen bei MathTex#
Die Abstands-Befehle in Mathtext wurden geändert, um besser mit reinem TeX übereinzustimmen.
Verbesserter Abstand in Mathtext#
Der zusätzliche Abstand, der nach tiefgestellten und hochgestellten Zeichen erschien, wurde entfernt.
Annotation-Koordinaten werden nicht mehr umgebrochen#
In #2351 für 1.4.0 wurde das Verhalten von ['axes points', 'axes pixel', 'figure points', 'figure pixel'] als Koordinaten geändert, sodass sie für negative Werte nicht mehr umgebrochen werden. In 1.4.3 wurde diese Änderung für 'axes points' und 'axes pixel' rückgängig gemacht und zusätzlich dazu führte, dass 'axes fraction' umgebrochen wurde. Für 1.5 wurde das Verhalten so zurückgesetzt, wie es in 1.4.0-1.4.2 war, keine Umbrechung für irgendeine Art von Koordinaten.
Deprecation#
Deprecated GraphicsContextBase.set_graylevel#
Die Funktion GraphicsContextBase.set_graylevel wurde in 1.5 als veraltet markiert und wird in 1.6 entfernt. Sie wurde nicht verwendet. GraphicsContextBase.set_foreground könnte stattdessen verwendet werden.
deprecated idle_event#
Das idle_event war in den meisten Backends defekt oder fehlte und verursachte in einigen Fällen irreführende Warnungen. Seine Verwendung zur Erstellung von Animationen ist nun dank des Animationsmoduls veraltet. Daher wurden Code, der es verwendet, aus allen Backends außer wx (wo es teilweise funktioniert) entfernt und seine Verwendung ist veraltet. Das animation-Modul kann stattdessen zur Erstellung von Animationen verwendet werden.
color_cycle deprecated#
Angesichts der neuen Funktion zur Eigenschaftszyklisierung ist die Axes-Methode set_color_cycle nun veraltet. Das Aufrufen dieser Methode ersetzt den aktuellen Eigenschaftszyklus durch einen, der nur die angegebenen Farben durchläuft.
Ebenso ist der rc-Parameter axes.color_cycle zugunsten des neuen rcParams["axes.prop_cycle"] (Standard: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])) veraltet. Das Vorhandensein beider Parameter in derselben rc-Datei wird nicht empfohlen, da das Ergebnis nicht vorhersehbar ist. Zur Kompatibilität ersetzt das Setzen von axes.color_cycle den Zyklisierer in rcParams["axes.prop_cycle"] (Standard: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])) durch einen Farbzyklus. Der Zugriff auf axes.color_cycle gibt nur den Farbbereich des Eigenschaftszyklus zurück, falls vorhanden.
Zeitplan für die Entfernung wurde nicht festgelegt.
Gebündeltes JQuery#
Die mit dem Webagg-Backend gebündelte Version von jQuery wurde von 1.7.1 auf 1.11.3 aktualisiert. Wenn Sie die mit Webagg gebündelte Version von jQuery verwenden, müssen Sie Ihre HTML-Dateien wie folgt aktualisieren
- <script src="_static/jquery/js/jquery-1.7.1.min.js"></script>
+ <script src="_static/jquery/js/jquery-1.11.3.min.js"></script>
Entfernter Code#
Entfernt Image aus dem Haupt-Namespace#
Image wurde von PIL/pillow importiert, um zu testen, ob PIL verfügbar ist. Es gibt jedoch keinen Grund, Image im Namespace zu behalten, sobald die Verfügbarkeit ermittelt wurde.
Entfernt lod von Artist#
Die Methode set_lod und alle Verweise auf das Attribut _lod wurden entfernt, da sie nirgendwo anders im Code verwendet werden. Es scheint sich um einen Feature-Stub zu handeln, der nie ausgebaut wurde.
Entfernt Lena-Bilder aus sample_data#
Die Bilder lena.png und lena.jpg wurden aus dem sample_data-Verzeichnis von Matplotlib entfernt. Die Bilder sind auch nicht mehr über matplotlib.cbook.get_sample_data verfügbar. Wir empfehlen stattdessen die Verwendung von matplotlib.cbook.get_sample_data('grace_hopper.png') oder matplotlib.cbook.get_sample_data('grace_hopper.jpg').
Legende#
Behandlung von loc als positionsabhängiges Argument für Legend entfernt
Legenden-Handler#
Code zur Zulassung von aufrufbaren Legenden-Handlern entfernt. Sie müssen nun eine Methode legend_artist implementieren.
Achse#
Methode set_scale entfernt. Dies wird nun über eine private Methode gehandhabt, die nicht direkt von Benutzern verwendet werden sollte. Sie wird über Axes.set_{x,y}scale aufgerufen, die sicherstellt, dass die damit verbundenen Änderungen auch am Axes-Objekt vorgenommen werden.
finance.py#
Funktionen mit mehrdeutiger Argumentreihenfolge aus finance.py entfernt
Annotation#
Entfernt textcoords und xytext Eigenschaften von Annotation-Objekten.
sphinxext.ipython_*.py#
Sowohl ipython_console_highlighting als auch ipython_directive wurden nach IPython verschoben.
Ändern Sie Ihren Import von matplotlib.sphinxext.ipython_directive zu IPython.sphinxext.ipython_directive und von matplotlib.sphinxext.ipython_directive zu IPython.sphinxext.ipython_directive
LineCollection.color#
2005 als veraltet markiert, verwenden Sie set_color
Entfernt 'faceted' als gültigen Wert für shading in tri.tripcolor#
Verwenden Sie stattdessen edgecolor. Hinzugefügt wurde eine Validierung für shading, sodass nur gültige Werte erlaubt sind.
Entfernt das kwarg faceted aus scatter#
Entfernt die Unterstützung für das kwarg faceted. Dies wurde in d48b34288e9651ff95c3b8a071ef5ac5cf50bae7 (2008-04-18!) als veraltet markiert und durch edgecolor ersetzt.
Entfernt die Methode set_colorbar aus ScalarMappable#
Entfernt die Methode set_colorbar, verwenden Sie stattdessen direkt das Attribut colorbar.
patheffects.svg#
Entfernt die Methode
get_proxy_rendereraus der KlasseAbstractPathEffectEntfernt
patch_alphaundoffset_xyausSimplePatchShadow
Entfernt testing.image_util.py#
Enthielt nur einen nicht mehr verwendeten Port von Funktionalität aus PIL
Entfernt mlab.FIFOBuffer#
Intern nicht verwendet und kein Teil des Kernziels von mpl.
Entfernt mlab.prepca#
Seit 2009 als veraltet markiert.
mpl.py#
Entfernt das Modul matplotlib.mpl. Veraltet in 1.3 durch PR #1670 und Commit 78ce67d161625833cacff23cfe5d74920248c5b2