API-Änderungen in 1.4.x#

Code-Änderungen#

  • Eine größere Refaktorierung des Achsenmoduls wurde vorgenommen. Das Achsenmodul wurde in kleinere Module aufgeteilt:

    • das Modul _base, das eine neue private Klasse _AxesBase enthält. Diese Klasse enthält alle Methoden außer den Zeichen- und Beschriftungsmethoden.

    • das Modul axes, das die Klasse axes.Axes enthält. Diese Klasse erbt von _AxesBase und enthält alle Zeichen- und Beschriftungsmethoden.

    • das Modul _subplot mit allen Klassen, die sich auf Unterplots beziehen.

    Es gibt einige Dinge, die nicht mehr im Namespace des Moduls axes vorhanden sind. Wenn Sie diese verwenden, müssen Sie sie von ihrem ursprünglichen Speicherort importieren:

    • math -> import math

    • ma -> from numpy import ma

    • cbook -> from matplotlib import cbook

    • docstring -> from matplotlib import docstring

    • is_sequence_of_strings -> from matplotlib.cbook import is_sequence_of_strings

    • is_string_like -> from matplotlib.cbook import is_string_like

    • iterable -> from matplotlib.cbook import iterable

    • itertools -> import itertools

    • martist -> from matplotlib import artist as martist

    • matplotlib -> import matplotlib

    • mcoll -> from matplotlib import collections as mcoll

    • mcolors -> from matplotlib import colors as mcolors

    • mcontour -> from matplotlib import contour as mcontour

    • mpatches -> from matplotlib import patches as mpatches

    • mpath -> from matplotlib import path as mpath

    • mquiver -> from matplotlib import quiver as mquiver

    • mstack -> from matplotlib import stack as mstack

    • mstream -> from matplotlib import stream as mstream

    • mtable -> from matplotlib import table as mtable

  • Als Teil der Refaktorierung zur Unterstützung von Qt5 wurde das Modul matplotlib.backends.qt4_compat in matplotlib.backends.qt_compat umbenannt. qt4_compat ist in Version 1.4 veraltet und wird in Version 1.5 entfernt.

  • Die Methode errorbar() wurde so geändert, dass die oberen und unteren Grenzen (lolims, uplims, xlolims, xuplims) nun in die richtige Richtung zeigen.

  • Das fmt-Schlüsselwortargument für errorbar() unterstützt nun die Zeichenfolge 'none', um das Zeichnen einer Linie und von Markern zu unterdrücken; die Verwendung des None-Objekts hierfür ist veraltet. Der Standardwert für fmt wurde auf eine leere Zeichenfolge ('') geändert, sodass Linie und Marker von den Standardeinstellungen von plot() gesteuert werden.

  • Ein Fehler bei der Pfad-Effekt-Darstellung von Schriftarten wurde behoben, wodurch die Schriftgröße nun konsistent mit Schriftarten ohne Pfad-Effekte ist. Weitere Details finden Sie unter matplotlib/matplotlib#2889.

  • Die Sphinx-Erweiterungen ipython_directive und ipython_console_highlighting wurden in das IPython-Projekt selbst verschoben. Obwohl sie für diese Veröffentlichung noch in Matplotlib vorhanden sind, wurden sie als veraltet gekennzeichnet. Aktualisieren Sie Ihre Erweiterungen in conf.py, damit sie auf IPython.sphinxext.ipython_directive anstatt auf matplotlib.sphinxext.ipython_directive verweisen.

  • In matplotlib.finance wurden fast alle Funktionen als veraltet gekennzeichnet und durch ein Paar von Funktionen namens *_ochl und *_ohlc ersetzt. Die erste ist die Reihenfolge der Zitate "Öffnen-Schließen-Hoch-Tief", die zuvor in diesem Modul verwendet wurde, und die letztere ist die Reihenfolge "Öffnen-Hoch-Tief-Schließen", die in der Finanzwelt Standard ist.

  • Zur Konsistenz wurde das Schlüsselwort face_alpha für matplotlib.patheffects.SimplePatchShadow durch das Schlüsselwort alpha ersetzt. Ebenso heißt das Schlüsselwort offset_xy nun offset in allen AbstractPathEffects. matplotlib.patheffects._Base wurde in matplotlib.patheffects.AbstractPathEffect umbenannt. matplotlib.patheffect.ProxyRenderer wurde in matplotlib.patheffects.PathEffectRenderer umbenannt und ist nun eine vollständige RendererBase-Unterklasse.

  • Der Künstler, der zum Zeichnen des Umrisses eines Figure.colorbar verwendet wurde, wurde von einem matplotlib.lines.Line2D zu einem matplotlib.patches.Polygon geändert, sodass colorbar.ColorbarBase.outline nun ein matplotlib.patches.Polygon-Objekt ist.

  • Die Schnittstelle des Legenden-Handlers wurde von einem aufrufbaren Objekt zu einem beliebigen Objekt geändert, das die Methode legend_artists implementiert (eine Verhaltensphase wird diese Schnittstelle für v1.4 beibehalten). Weitere Einzelheiten finden Sie im Leitfaden für Legenden. Weitere Änderungen an Legenden umfassen:

    • matplotlib.axes.Axes._get_legend_handles gibt nun einen Generator von Handles zurück, anstatt einer Liste.

    • Das Positionsargument loc der Funktion legend() ist veraltet. Verwenden Sie stattdessen das Schlüsselwortargument loc.

  • Die rcParams["savefig.transparent"] (Standard: False) wurde hinzugefügt, um die Standardtransparenz beim Speichern von Abbildungen zu steuern.

  • Die Annotationen-Familie wurde leicht refaktoriert. Die Textposition in Annotation wird nun vollständig vom zugrunde liegenden Text-Objekt gehandhabt, sodass .set_position wie erwartet funktioniert. Die Attribute xytext und textcoords sind veraltet zugunsten von xyann und anncoords, damit Annotation und AnnotationBbox eine gemeinsame, sinnvoll benannte API für das Abrufen/Setzen der Position des Textes oder der Box haben können.

    • xyann -> setzt die Position der Annotation

    • xy -> setzt, worauf der Pfeil zeigt

    • anncoords -> setzt die Einheiten der Annotationsposition

    • xycoords -> setzt die Einheiten des Punktes

    • set_position() -> Annotation setzt nur die Position der Annotation

  • matplotlib.mlab.specgram, matplotlib.mlab.psd, matplotlib.mlab.csd, matplotlib.mlab.cohere, matplotlib.mlab.cohere_pairs, matplotlib.pyplot.specgram, matplotlib.pyplot.psd, matplotlib.pyplot.csd und matplotlib.pyplot.cohere lösen nun ValueError aus, wo sie zuvor AssertionError auslösten.

  • Für matplotlib.mlab.psd, matplotlib.mlab.csd, matplotlib.mlab.cohere, matplotlib.mlab.cohere_pairs, matplotlib.pyplot.specgram, matplotlib.pyplot.psd, matplotlib.pyplot.csd und matplotlib.pyplot.cohere werden in Fällen, in denen ein Array der Form (n, 1) zurückgegeben wird, diese nun in ein (n,)-Array umgewandelt. Zuvor wurden (n, m)-Arrays zu einem (n,)-Array gemittelt, aber (n, 1)-Arrays wurden unverändert zurückgegeben. Diese Änderung macht die Dimensionen in beiden Fällen konsistent.

  • Unterstützung für rcParams["axes.formatter.useoffset"] (Standard: True) hinzugefügt, um den Standardwert von useOffset in ticker.ScalarFormatter zu steuern.

  • Die Formatter-Unterklasse StrMethodFormatter wurde hinzugefügt, die exakt dasselbe tut wie FormatStrFormatter, jedoch für neue Formatierungszeichenfolgen.

  • matplotlib.testing.image_util und die einzige darin enthaltene Funktion, matplotlib.testing.image_util.autocontrast, sind veraltet. Diese werden in Version 1.5.0 vollständig entfernt.

  • Das Argument fmt von plot_date() wurde von bo zu nur o geändert, damit die Farbzyklierung standardmäßig erfolgen kann.

  • Die Klasse FigureManagerQTAgg wurde entfernt und NavigationToolbar2QTAgg als veraltet gekennzeichnet, die in Version 1.5 entfernt wird.

  • Früher öffentliche (nicht mit Präfix versehene) Attribute rect und drawRect von FigureCanvasQTAgg wurden entfernt; sie waren immer eine Implementierungsdetail der (erhaltenen) Funktion drawRectangle().

  • Die Funktionssignaturen von matplotlib.tight_bbox.adjust_bbox und matplotlib.tight_bbox.process_figure_for_rasterizing wurden geändert. Ein neuer Parameter fixed_dpi ermöglicht es, die Einstellung figure.dpi zu überschreiben, anstatt zu versuchen, das beabsichtigte Verhalten aus dem Dateiformat abzuleiten.

  • Unterstützung für horizontale/vertikale Achsenabstände wurde zu mpl_toolkits.axes_grid1.axes_grid.ImageGrid hinzugefügt --- das Argument axes_pad kann nun ein Tupel-ähnliches Objekt sein, wenn separate Achsenabstände erforderlich sind. Das ursprüngliche Verhalten bleibt erhalten.

  • Unterstützung für schräge Transformationen wurde zu matplotlib.transforms.Affine2D hinzugefügt, die mithilfe der Methoden skew und skew_deg erstellt werden können.

  • Parameter clockwise wurde hinzugefügt, um die Sektorrichtung in axes.Axes.pie zu steuern.

  • In matplotlib.lines.Line2D wurde die Funktionalität markevery erweitert. Zuvor konnte ein ganzzahliger Startindex und eine Schrittweite mithilfe einer Liste mit zwei Elementen oder eines Tupels mit zwei Elementen angegeben werden. Nun kann dies nur noch mit einem Tupel mit zwei Elementen erfolgen. Wenn eine Liste mit zwei Elementen verwendet wird, wird diese als NumPy-Fancy-Indizierung behandelt und nur die beiden Marker, die den angegebenen Indizes entsprechen, werden angezeigt.

  • Das Schlüsselwortargument prop wurde aus dem Aufruf von mpl_toolkits.axes_grid1.anchored_artists.AnchoredSizeBar entfernt. Es wurde an die Basisklasse __init__ weitergegeben und nur zum Festlegen des Abstands verwendet. Nun wird fontproperties (was tatsächlich zur Festlegung der Schriftarteigenschaften von AnchoredSizeBar verwendet wird) anstelle von prop weitergegeben. Wenn fontproperties nicht übergeben wird, aber prop, dann wird prop anstelle von fontproperties verwendet. Wenn beides übergeben wird, wird prop stillschweigend ignoriert.

  • Die Verwendung des Index 0 in pyplot.subplot und verwandten Befehlen ist veraltet. Aufgrund mangelnder Validierung löst der Aufruf von plt.subplots(2, 2, 0) keine Ausnahme aus, sondern platziert eine Achse an der _letzten_ Position. Dies liegt daran, dass die Indizierung in subplot 1-basiert ist (um MATLAB zu spiegeln), sodass vor der Indizierung in das GridSpec-Objekt, das bestimmt, wo die Achse platziert werden soll, 1 subtrahiert wird. Die Übergabe von 0 führt dazu, dass -1 an GridSpec übergeben wird, was dazu führt, dass die letzte Position zurückgegeben wird. Obwohl dieses Verhalten eindeutig falsch und nicht beabsichtigt ist, gehen wir aus Vorsicht einen Verwendungszyklus durch, falls einige Benutzer diese "Funktion" ausnutzen. Die Verwendung von 0 als Index löst in Version 1.4 eine Warnung und in Version 1.5 eine Ausnahme aus.

  • Clipping ist jetzt standardmäßig bei Offset-Boxen deaktiviert.

  • Matplotlib verwendet nun einen weniger aggressiven Aufruf von gc.collect(1) beim Schließen von Abbildungen, um größere Verzögerungen bei einer großen Anzahl von Benutzerobjekten im Speicher zu vermeiden.

  • Der Standard-Clippingwert von all-Pie-Künstlern ist nun standardmäßig False.

Code-Entfernung#

  • mlab.levypdf wurde entfernt. Der Code löste einen NumPy-Fehler aus (und das schon seit langem) und war nicht die Standardform der Levy-Verteilung. Stattdessen sollte scipy.stats.levy verwendet werden.