API-Änderungen in 2.1.0#
Das Standardverhalten von logarithmischen Skalen wurde geändert, um Werte <= 0 zu maskieren#
Aufrufe von matplotlib.axes.Axes.set_xscale oder matplotlib.axes.Axes.set_yscale verwenden nun 'mask' als Standardmethode zur Behandlung ungültiger Werte (im Gegensatz zu 'clip'). Dies bedeutet, dass alle Werte <= 0 auf einer logarithmischen Skala nicht angezeigt werden.
Zuvor wurden sie auf eine sehr kleine Zahl geklippt und angezeigt.
matplotlib.cbook.CallbackRegistry.process() unterdrückt Ausnahmen standardmäßig#
Matplotlib verwendet Instanzen von CallbackRegistry als Brücke zwischen Benutzerereignissen aus der GUI und Benutzer-Callbacks. Zuvor sprangen alle Ausnahmen, die in einem Benutzer-Callback ausgelöst wurden, aus der process-Methode heraus, die sich typischerweise in der GUI-Ereignisschleife befindet. Die meisten GUI-Frameworks drucken einfach den Traceback auf den Bildschirm und fahren fort, da es keine klare Methode gibt, die Ausnahme an den Benutzer zurückzugeben. PyQt5 beendet jedoch nun den Prozess, wenn es eine unbehandelte Python-Ausnahme in der Ereignisschleife erhält. Daher unterdrückt process() nun standardmäßig Tracebacks und druckt sie nach stderr.
Wie process() mit Ausnahmen umgeht, ist nun über das Attribut und das Keyword-Argument exception_handler benutzerkonfigurierbar. Um das frühere Verhalten wiederherzustellen, übergeben Sie None.
cb = CallbackRegistry(exception_handler=None)
Eine Funktion, die eine Exception als einziges Argument nimmt, kann ebenfalls übergeben werden.
def maybe_reraise(exc):
if isinstance(exc, RuntimeError):
pass
else:
raise exc
cb = CallbackRegistry(exception_handler=maybe_reraise)
Verbessertes Umschalten von Achsen-Gittern#
Die g-Tastenbindung schaltet nun die Zustände der x- und y-Gitter unabhängig voneinander um (indem alle vier Ein/Aus-Kombinationen durchlaufen werden).
Die neue G-Tastenbindung schaltet die Zustände der kleinen Gitter um.
Beide Bindungen sind deaktiviert, wenn nur ein Teil der Gitterlinien (in einer beliebigen Richtung) sichtbar ist, um irreversible Änderungen am Diagramm zu vermeiden.
Tick-Labels werden ausgeschaltet statt unsichtbar gemacht#
Intern wird nun das Attribut ~matplotlib.axis.Tick.label1On von Tick verwendet, um Tick-Labels auszublenden, anstatt die Sichtbarkeit der Tick-Label-Objekte zu setzen. Dies verbessert die Gesamtleistung und behebt einige Probleme. Infolgedessen muss tick_params() verwendet werden, um die Labels anzuzeigen, z. B.
ax.tick_params(labelbottom=True)
Entfernung der Warnung bei leeren Legenden#
pyplot.legend gab früher eine Warnung aus, wenn kein beschrifteter Künstler gefunden werden konnte. Diese Warnung wurde entfernt.
Genauere automatische Positionierung der Legende#
Die automatische Positionierung von Legenden bevorzugt nun die Nutzung des Bereichs, der von einer Line2D umschlossen ist, anstatt die Legende über die Linie selbst zu legen.
Bereinigung von Stock-Beispieldaten#
Die Beispieldaten von Aktien wurden bereinigt, um Redundanzen zu entfernen und die Portabilität zu erhöhen. Die Dateien AAPL.dat.gz, INTC.dat.gz und aapl.csv wurden vollständig entfernt und sind auch nicht mehr über matplotlib.cbook.get_sample_data verfügbar. Wenn eine CSV-Datei benötigt wird, empfehlen wir die Verwendung von msft.csv, das weiterhin in den Beispieldaten enthalten ist. Wenn eine NumPy-Binärdatei akzeptabel ist, empfehlen wir die Verwendung einer der folgenden beiden neuen Dateien. Die Dateien aapl.npy.gz und goog.npy wurden durch aapl.npz und goog.npz ersetzt, wobei sich der Typ der ersten Spalte von datetime.date zu numpy.datetime64 geändert hat, um die Portabilität über Python-Versionen hinweg zu verbessern. Beachten Sie, dass Matplotlib numpy.datetime64 noch nicht vollständig unterstützt.
qhull auf 2015.2 aktualisiert#
Die mit Matplotlib ausgelieferte qhull-Version, die für Delaunay-Triangulationen verwendet wird, wurde von Version 2012.1 auf 2015.2 aktualisiert.
Verbesserte Delaunay-Triangulationen mit großen Offsets#
Delaunay-Triangulationen gehen nun besser mit großen x/y-Offsets um. Dies kann zu geringfügigen Änderungen bei allen mit Matplotlib berechneten Triangulationen führen, d. h. bei jeder Verwendung von matplotlib.tri.Triangulation, die eine Delaunay-Triangulation anfordert, was matplotlib.pyplot.tricontour, matplotlib.pyplot.tricontourf, matplotlib.pyplot.tripcolor, matplotlib.pyplot.triplot, matplotlib.mlab.griddata und mpl_toolkits.mplot3d.axes3d.Axes3D.plot_trisurf einschließt.
Verwendung von backports.functools_lru_cache anstelle von functools32#
Es wird besser gewartet und häufiger verwendet (von pylint, jaraco, etc.).
cbook.is_numlike führt nur eine Instanzprüfung durch#
matplotlib.cbook.is_numlike prüft nun nur noch, ob das Argument eine Instanz von (numbers.Number, np.Number) ist. Insbesondere bedeutet dies, dass Arrays nun nicht mehr num-like sind.
Elliptische Bögen werden nun zwischen korrekten Winkeln gezeichnet#
Der matplotlib.patches.Arc-Patch wird nun korrekt zwischen den angegebenen Winkeln gezeichnet.
Zuvor wurde ein kreisförmiger Bogen gezeichnet und dann zu einer Ellipse gestreckt, sodass der resultierende Bogen nicht zwischen theta1 und theta2 lag.
-d$backend setzt das Backend nicht mehr#
Es ist nicht mehr möglich, das Backend durch Übergabe von -d$backend in der Befehlszeile zu setzen. Verwenden Sie stattdessen die Umgebungsvariable MPLBACKEND.
Path.intersects_bbox behandelt die Bounding Box immer als gefüllt#
Zuvor wurde beim Aufruf von Path.intersects_bbox mit filled auf False gesetzt, sowohl der Pfad als auch die Bounding Box als nicht gefüllt behandelt. Dieses Verhalten war nicht gut dokumentiert und ist normalerweise nicht erwünscht, da Bounding Boxes verwendet werden, um komplexere Formen innerhalb der Bounding Box darzustellen. Dieses Verhalten wurde nun geändert: Wenn filled auf False gesetzt ist, wird der Pfad als nicht gefüllt behandelt, die Bounding Box jedoch weiterhin als gefüllt. Das alte Verhalten war wohl ein Implementierungsfehler.
Wenn Path.intersects_bbox mit filled auf True (der Standardwert) gesetzt ist, gibt es keine Verhaltensänderung. Für die seltenen Fälle, in denen Path.intersects_bbox mit filled auf False gesetzt wurde und das alte Verhalten tatsächlich erwünscht war, ist die vorgeschlagene Abhilfe, Path.intersects_path mit einem Rechteck als Pfad aufzurufen.
from matplotlib.path import Path
from matplotlib.transforms import Bbox, BboxTransformTo
rect = Path.unit_rectangle().transformed(BboxTransformTo(bbox))
result = path.intersects_path(rect, filled=False)
WX generiert keine IdleEvent-Ereignisse mehr und ruft keine idle_event auf#
Entfernte ungenutzte private Methode _onIdle aus FigureCanvasWx.
Die Klasse IdleEvent und die Methode FigureCanvasBase.idle_event werden in Version 2.2 entfernt.
Korrekte Skalierung von magnitude_spectrum()#
Die Funktionen matplotlib.mlab.magnitude_spectrum() und matplotlib.pyplot.magnitude_spectrum() nahmen implizit an, dass die Summe der Fensterfunktionswerte eins ist. In Matplotlib und Numpy werden die Standardfensterfunktionen auf einen Maximalwert von eins skaliert, was bei einem n-Punkt-Signal normalerweise zu einer Summe in der Größenordnung von n/2 führt. Daher war die Amplitudenskala von magnitude_spectrum() bei Verwendung von Standardfensterfunktionen um diesen Betrag falsch (Bug 8417). Nun ist das Verhalten konsistent mit matplotlib.pyplot.psd() und scipy.signal.welch(). Das folgende Beispiel demonstriert die neue und alte Skalierung.
import matplotlib.pyplot as plt
import numpy as np
tau, n = 10, 1024 # 10 second signal with 1024 points
T = tau/n # sampling interval
t = np.arange(n)*T
a = 4 # amplitude
x = a*np.sin(40*np.pi*t) # 20 Hz sine with amplitude a
# New correct behavior: Amplitude at 20 Hz is a/2
plt.magnitude_spectrum(x, Fs=1/T, sides='onesided', scale='linear')
# Original behavior: Amplitude at 20 Hz is (a/2)*(n/2) for a Hanning window
w = np.hanning(n) # default window is a Hanning window
plt.magnitude_spectrum(x*np.sum(w), Fs=1/T, sides='onesided', scale='linear')
Änderung der Signaturen von bar() & barh()#
Für 2.0 wurde der Standardwert von *align* auf 'center' geändert. Dies führte jedoch dazu, dass die Signatur von bar() und barh() irreführend war, da die ersten Parameter immer noch left bzw. bottom waren.
bar(left, height, *, align='center', **kwargs)
barh(bottom, width, *, align='center', **kwargs)
obwohl sie sich in beiden Fällen wie die Mitte verhielten. Die Methoden nehmen nun *args, **kwargs als Eingabe entgegen und sind dokumentiert, die primären Signaturen von zu haben.
bar(x, height, *, align='center', **kwargs)
barh(y, width, *, align='center', **kwargs)
Die Übergabe von left und bottom als Schlüsselwortargumente an bar() und barh() gibt eine Warnung aus. Die Unterstützung wird in Matplotlib 3.0 entfernt.
Schriftartencache als JSON#
Der Schriftartencache wird nun als JSON gespeichert, anstatt als Pickle.
Fehler bei ungültigen (nicht-endlichen) Achsenlimits#
Bei Verwendung von set_xlim() und set_ylim() führt die Übergabe nicht-endlicher Werte nun zu einem ValueError. Das vorherige Verhalten führte dazu, dass die Limits fälschlicherweise auf (-0.001, 0.001) zurückgesetzt wurden.
Offsets von scatter und Collection werden nicht mehr implizit abgeflacht#
Collection (und damit sowohl 2D scatter als auch 3D scatter) flacht seine Offsets nicht mehr implizit ab. Infolgedessen können die Argumente x und y von scatter keine 2+-dimensionalen Arrays mehr sein.
Deprecations#
Eigenschaft linestyle von GraphicsContextBase.#
Die Methoden GraphicsContextBase.get_linestyle und GraphicsContextBase.set_linestyle, die keine Auswirkung hatten, wurden als veraltet markiert. Alle von Matplotlib ausgelieferten Backends verwenden GraphicsContextBase.get_dashes und GraphicsContextBase.set_dashes, die allgemeiner sind. Drittanbieter-Backends sollten ebenfalls zu den *_dashes-Methoden migrieren.
Tests
matplotlib.testing.noseclasses ist veraltet und wird in Version 2.3 entfernt.
EngFormatter num-Argument als String#
Die Übergabe eines Strings als num-Argument beim Aufruf einer Instanz von matplotlib.ticker.EngFormatter ist veraltet und wird in Version 2.3 entfernt.
Modul mpl_toolkits.axes_grid#
Die gesamte Funktionalität von mpl_toolkits.axes_grid findet sich entweder in mpl_toolkits.axes_grid1 oder in mpl_toolkits.axisartist. Achsenklassen aus mpl_toolkits.axes_grid, die auf Axis von mpl_toolkits.axisartist basieren, finden sich in mpl_toolkits.axisartist.
Kollision von Achsen in Figure.add_axes#
Das Hinzufügen einer Achseninstanz zu einer Abbildung mit denselben Argumenten wie für eine frühere Achseninstanz verwendet derzeit die frühere Instanz wieder. Dieses Verhalten wurde in Matplotlib 2.1 als veraltet markiert. In einer zukünftigen Version wird immer eine *neue* Instanz erstellt und zurückgegeben. In der Zwischenzeit wird in einer solchen Situation eine Deprecation-Warnung von matplotlib.figure.AxesStack ausgegeben.
Diese Warnung kann unterdrückt und das zukünftige Verhalten sichergestellt werden, indem jeder Achseninstanz ein *eindeutiges* Label übergeben wird. Weitere Informationen finden Sie im Docstring von add_axes().
Weitere Details zur Begründung dieser Veralterung finden Sie unter #7377 und #9024.
Frühere Validatoren für contour.negative_linestyle#
Die früheren öffentlichen Validierungsfunktionen validate_negative_linestyle und validate_negative_linestyle_legacy werden in Version 2.1 als veraltet markiert und können in Version 2.3 entfernt werden. Es gibt keine öffentlichen Funktionen, die sie ersetzen.
cbook#
Viele ungenutzte oder fast ungenutzte Funktionen und Klassen in matplotlib.cbook wurden als veraltet markiert: converter, tostr, todatetime, todate, tofloat, toint, unique, is_string_like, is_sequence_of_strings, is_scalar, Sorter, Xlator, soundex, Null, dict_delall, RingBuffer, get_split_ind, wrap, get_recursive_filelist, pieces, exception_to_str, allequal, alltrue, onetrue, allpairs, finddir, reverse_dict, restrict_dict, issubclass_safe, recursive_remove, unmasked_index_ranges.
Code-Entfernung#
qt4_compat.py#
Verschoben nach qt_compat.py. Umbenannt, da es nun auch Qt5 behandelt.
Zuvor als veraltet markierte Methoden#
Die Methoden GraphicsContextBase.set_graylevel, FigureCanvasBase.onHilite und mpl_toolkits.axes_grid1.mpl_axes.Axes.toggle_axisline wurden entfernt.
Die Methode ArtistInspector.findobj, die aufgrund des Fehlens einer get_children-Methode nie funktionierte, wurde entfernt.
Die als veraltet markierten Funktionen point_in_path, get_path_extents, point_in_path_collection, path_intersects_path, convert_path_to_polygons, cleanup_path und clip_path_to_rect im Modul matplotlib.path wurden entfernt. Ihre Funktionalität bleibt als Methoden der Klasse Path zugänglich.
Die als veraltet markierten Methoden Artist.get_axes und Artist.set_axes wurden entfernt.
Die Funktion matplotlib.backends.backend_ps.seq_allequal wurde entfernt. Verwenden Sie stattdessen np.array_equal.
Die als veraltet markierten Funktionen matplotlib.rcsetup.validate_maskedarray, matplotlib.rcsetup.deprecate_savefig_extension und matplotlib.rcsetup.validate_tkpythoninspect sowie die zugehörigen rcparams-Einträge savefig.extension und tk.pythoninspect wurden entfernt.
Das Schlüsselwortargument resolution von matplotlib.projections.polar.PolarAxes wurde entfernt. Es war ab Version 0.98.x als veraltet markiert und wirkungslos.
Axes.set_aspect("normal")#
Die Unterstützung für das Setzen des Seitenverhältnisses einer Axes auf "normal" wurde entfernt. Stattdessen wird das Synonym "auto" verwendet.
Keyword-Argument shading für pcolor#
Das Keyword-Argument shading für pcolor wurde entfernt. Setzen Sie stattdessen edgecolors entsprechend.
Aus dem Modul lines entfernte Funktionen#
Das Modul matplotlib.lines importiert die Funktionen pts_to_prestep, pts_to_midstep und pts_to_poststep nicht mehr aus matplotlib.cbook.
PDF-Backend-Funktionen#
Die Methoden embedTeXFont und tex_font_mapping von matplotlib.backends.backend_pdf.PdfFile wurden entfernt. Es ist unwahrscheinlich, dass externe Benutzer diese Methoden aufgerufen hätten, da sie sich auf das interne Schriftsystem des PDF-Backends beziehen.
matplotlib.delaunay#
Entfernen des Delaunay-Triangulationscodes, der nun von Qhull über matplotlib.tri gehandhabt wird.