Was gibt's Neues in Matplotlib 2.2 (06. Mrz. 2018)#
Constrained Layout Manager#
Warnung
Constrained Layout ist experimentell. Das Verhalten und die API können sich ändern, oder die gesamte Funktionalität kann ohne eine Vorankündigungsfrist entfernt werden.
Eine neue Methode zur automatischen Bestimmung des Abstands zwischen Subplots und ihren organisierenden GridSpec Instanzen wurde hinzugefügt. Sie soll die ehrwürdige Methode tight_layout ersetzen. Sie wird über ein neues Schlüsselwortargument constrained_layout=True für Figure oder subplots aufgerufen.
Es gibt neue rcParams für dieses Paket, und der Abstand kann mit der neuen Methode set_constrained_layout_pads feiner abgestimmt werden.
Zu den Funktionen gehören
Automatischer Abstand für Subplots mit einem festen Polster in Zoll um Subplots und all ihre Dekoratoren, und ein Abstand als Bruchteil der Subplotgröße zwischen den Subplots.
Abstände für
suptitleund Farbbalken, die an mehr als eine Achse angehängt sind.Verschachtelte
GridSpecLayouts unter Verwendung vonGridSpecFromSubplotSpec.
Weitere Details und Fähigkeiten finden Sie im neuen Tutorial: Constrained layout guide
Beachten Sie die neue API, um darauf zuzugreifen
Neues Schlüsselwortargument plt.figure und plt.subplots: constrained_layout#
figure() und subplots() können jetzt mit dem Schlüsselwortargument constrained_layout=True aufgerufen werden, um constrained_layout zu aktivieren.
Neues Verhalten von ax.set_position#
Axes.set_position macht die angegebene Achse nicht mehr empfänglich für constrained_layout, konsistent mit der Idee, dass der Benutzer eine Achse manuell platzieren möchte.
Intern bedeutet dies, dass alte ax.set_position Aufrufe *innerhalb* der Bibliothek in private ax._set_position Aufrufe geändert wurden, damit constrained_layout weiterhin mit diesen Achsen funktioniert.
Neues figure Schlüsselwortargument für GridSpec#
Um constrained_layout zu erleichtern, akzeptiert GridSpec nun ein figure Schlüsselwort. Dies ist abwärtskompatibel, da das Nicht-Angeben dieses Arguments einfach dazu führt, dass constrained_layout nicht auf die von dieser GridSpec Instanz organisierten Subplots angewendet wird. Routinen, die GridSpec verwenden (z. B. fig.subplots), wurden modifiziert, um die Figur an GridSpec zu übergeben.
X-Achsenbeschriftungen und Y-Achsenbeschriftungen können jetzt automatisch ausgerichtet werden#
Die Y-Achsenbeschriftungen von Subplot-Achsen können horizontal falsch ausgerichtet sein, wenn die Tick-Beschriftungen sehr unterschiedliche Breiten haben. Dasselbe kann mit den X-Achsenbeschriftungen passieren, wenn die Tick-Beschriftungen auf einem Subplot gedreht sind (zum Beispiel). Die neuen Methoden der Figure Klasse: Figure.align_xlabels und Figure.align_ylabels richten diese Beschriftungen nun horizontal oder vertikal aus. Wenn der Benutzer nur einige Achsen ausrichten möchte, kann eine Liste von Achsen übergeben werden. Wenn keine Liste übergeben wird, betrachtet der Algorithmus alle Beschriftungen auf der Figur.
Nur Beschriftungen, die die gleichen Subplot-Positionen haben, werden ausgerichtet. Das heißt, die Y-Achsenbeschriftungen werden nur ausgerichtet, wenn sich die Subplots in der gleichen Spalte des Subplot-Layouts befinden.
Die Ausrichtung ist nach diesen Aufrufen persistent und automatisch.
Ein praktischer Wrapper Figure.align_labels ruft beide Funktionen gleichzeitig auf.
Legenden von Achsen nun im tight_bbox enthalten#
Legenden, die über ax.legend erstellt werden, können manchmal die Grenzen der Achse überschreiten. Werkzeuge wie fig.tight_layout() und fig.savefig(bbox_inches='tight') würden diese Legenden abschneiden. Eine Änderung wurde vorgenommen, um sie in die tight Berechnungen einzubeziehen.
Cividis-Colormap#
Eine neue dunkelblaue/gelbe Colormap namens 'cividis' wurde hinzugefügt. Ähnlich wie viridis ist cividis wahrnehmungs-uniform und farbenblindheitsfreundlich. cividis geht jedoch noch einen Schritt weiter: Es ist nicht nur für farbenblinde Benutzer nutzbar, sondern sollte für farbenblinde und nicht-farbenblinde Benutzer praktisch identisch aussehen. Weitere Details finden Sie unter Nuñez J, Anderton C, und Renslow R: "Optimizing colormaps with consideration for color vision deficiency to enable accurate interpretation of scientific data".
Neuer, farbenblindheitsfreundlicher Farbzyklus-Stil#
Ein neuer Stil, der einen Farbzyklus definiert, wurde hinzugefügt: tableau-colorblind10, um eine weitere Option für farbenblindheitsfreundliche Plots zu bieten. Eine Demonstration dieses neuen Stils finden Sie in der Referenz der Stilvorlagen. Um diesen Farbzyklus anstelle des Standard-Farbzyklus zu laden
import matplotlib.pyplot as plt
plt.style.use('tableau-colorblind10')
Unterstützung für numpy.datetime64#
Matplotlib unterstützt seit langem datetime.datetime-Daten in matplotlib.dates. Jetzt unterstützen wir auch numpy.datetime64-Daten. Überall dort, wo datetime.datetime verwendet werden konnte, kann nun numpy.datetime64 verwendet werden. Z. B.:
time = np.arange('2005-02-01', '2005-02-02', dtype='datetime64[h]')
plt.plot(time)
Animationen mit Pillow schreiben#
Es ist jetzt möglich, Pillow als Animationsschreiber zu verwenden. Unterstützte Ausgabeformate sind derzeit gif (Pillow>=3.4) und webp (Pillow>=5.0). Verwenden Sie z. B. wie folgt:
from __future__ import division
from matplotlib import pyplot as plt
from matplotlib.animation import FuncAnimation, PillowWriter
fig, ax = plt.subplots()
line, = plt.plot([0, 1])
def animate(i):
line.set_ydata([0, i / 20])
return [line]
anim = FuncAnimation(fig, animate, 20, blit=True)
anim.save("movie.gif", writer=PillowWriter(fps=24))
plt.show()
Slider-UI-Widget kann auf diskrete Werte springen#
Das Slider-UI-Widget kann das optionale Argument *valstep* annehmen. Dadurch wird der Slider gezwungen, nur diskrete Werte anzunehmen, beginnend bei *valmin* und aufsteigend bis *valmax* mit Schritten der Größe *valstep*.
Wenn *closedmax==True*, dann springt der Slider auch zu *valmax*.
capstyle und joinstyle Attribute zu Collection hinzugefügt#
Die Klasse Collection verfügt nun über anpassbare Attribute capstyle und joinstyle. Dies ermöglicht es dem Benutzer beispielsweise, den capstyle von Fehlerbalken einzustellen.
pad Schlüsselwortargument zu ax.set_title hinzugefügt#
Die Methode Axes.set_title verfügt nun über ein Schlüsselwortargument *pad*, das den Abstand vom oberen Rand einer Achse bis zum Zeichenpunkt des Titels angibt. Die Einheit von *pad* ist Punkt, und der Standardwert ist der Wert des (bereits vorhandenen) rcParams["axes.titlepad"] (Standard: 6.0).
Vergleich von 2 Farben in Matplotlib#
Da die Farben in Matplotlib auf vielfältige Weise angegeben werden können, wurde die Methode matplotlib.colors.same_color hinzugefügt, die prüft, ob zwei colors gleich sind.
Autoskalierung eines Polardiagramms rastet am Ursprung ein#
Das automatische Setzen der Grenzen in einem Polardiagramm rastet nun an Null ein, wenn die automatische Grenze in der Nähe ist. Das bedeutet, dass das Plotten ab Null nicht mehr automatisch so skaliert wird, dass auch kleine negative Werte auf der Radialachse enthalten sind.
Die Grenzen können weiterhin auf übliche Weise manuell mit set_ylim gesetzt werden.
PathLike-Unterstützung#
Ab Python 3.6 akzeptieren savefig, imsave, imread und Animationsschreiber os.PathLike als Eingabe.
Axes.tick_params kann Gitterlinien-Eigenschaften festlegen#
Tick Objekte enthalten Gitterlinien sowie die Tick-Markierung und ihre Beschriftung. Axis.set_tick_params, Axes.tick_params und pyplot.tick_params haben nun die Schlüsselwortargumente 'grid_color', 'grid_alpha', 'grid_linewidth' und 'grid_linestyle' zum Überschreiben der Standardwerte in rcParams: 'grid.color', usw.
Axes.imshow schneidet RGB-Werte auf den gültigen Bereich zu#
Wenn Axes.imshow ein RGB- oder RGBA-Wert mit Werten außerhalb des gültigen Bereichs übergeben wird, protokolliert es nun eine Warnung und schneidet diese auf den gültigen Bereich zu. Das alte Verhalten, das Werte wieder in den Bereich wickelte, verbarg oft Ausreißer und machte die Interpretation von RGB-Bildern unzuverlässig.
Eigenschaften in matplotlibrc zum Platzieren von X- und Y-Achsen-Tick-Beschriftungen#
Einführung von vier neuen booleschen Eigenschaften in matplotlibrc für Standardpositionen von X- und Y-Achsen-Tick-Beschriftungen, nämlich rcParams["xtick.labeltop"] (Standard: False), rcParams["xtick.labelbottom"] (Standard: True), rcParams["ytick.labelright"] (Standard: False) und rcParams["ytick.labelleft"] (Standard: True). Diese können auch in rcParams geändert werden.
PGI-Bindungen für gtk3#
Die GTK3-Backends können nun PGI anstelle von PyGObject verwenden. PGI ist eine recht unvollständige Bindung für GObject, daher wird deren Verwendung nicht empfohlen; ihr Hauptvorteil ist ihre Verfügbarkeit auf Travis (was CI-Tests für die gtk3agg- und gtk3cairo-Backends ermöglicht).
Die Regeln für die Bindungsauswahl sind wie folgt: - Wenn gi bereits importiert wurde, verwenden Sie es; andernfalls - Wenn pgi bereits importiert wurde, verwenden Sie es; andernfalls - Wenn gi importiert werden kann, verwenden Sie es; andernfalls - Wenn pgi importiert werden kann, verwenden Sie es; andernfalls - Fehler ausgeben.
Um die Verwendung von PGI zu erzwingen, wenn beide Bindungen installiert sind, importieren Sie es zuerst.
Cairo-Rendering für Qt-, WX- und Tk-Canvas#
Die neuen Backends Qt4Cairo, Qt5Cairo, WXCairo und TkCairo ermöglichen es Qt-, Wx- und Tk-Canvas, Cairo-Rendering anstelle von Agg zu verwenden.
Unterstützung für QT im neuen ToolManager hinzugefügt#
Jetzt ist es möglich, den ToolManager mit Qt5 zu verwenden. Zum Beispiel:
import matplotlib
matplotlib.use('QT5AGG')
matplotlib.rcParams['toolbar'] = 'toolmanager'
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.show()
Betrachten Sie die neuen Tool-Klassen vorerst als experimentell, die API wird sich wahrscheinlich ändern und vielleicht auch die rcParam.
Das Hauptbeispiel Tool Manager zeigt weitere Details, passen Sie einfach die Kopfzeile an, um QT anstelle von GTK3 zu verwenden.
TkAgg-Backend überarbeitet, um PyPy zu unterstützen#
PyPy kann jetzt mit dem TkAgg-Backend plotten, unterstützt ab PyPy 5.9 (sowohl PyPy für Python 2.7 als auch PyPy für Python 3.5).
Python-Logging-Bibliothek für Debug-Ausgaben verwendet#
Matplotlib verwendete in der Vergangenheit (sporadisch) einen internen Berichterstatter für ausführliche Ausgaben. Diese Version konvertiert diese Aufrufe zur Verwendung der Standard-Python-Bibliothek logging.
Die Unterstützung für die alten rcParams verbose.level und verbose.fileo wird eingestellt.
Die Befehlszeilenoptionen --verbose-helpful und --verbose-debug werden weiterhin akzeptiert, sind aber veraltet. Sie entsprechen nun dem Setzen von logging.INFO bzw. logging.DEBUG.
Der Stammname des Loggers ist matplotlib und kann aus Programmen wie folgt abgerufen werden:
import logging
mlog = logging.getLogger('matplotlib')
Anleitungen zur grundlegenden Verwendung finden Sie in den Troubleshooting und für Entwickler im Contributing guide.
Verbesserte repr für Transforms#
Transforms rücken nun ihre reprs auf lesbarere Weise ein
In [1]: l, = plt.plot([]); l.get_transform()
Out[1]:
CompositeGenericTransform(
TransformWrapper(
BlendedAffine2D(
IdentityTransform(),
IdentityTransform())),
CompositeGenericTransform(
BboxTransformFrom(
TransformedBbox(
Bbox(x0=-0.05500000000000001, y0=-0.05500000000000001, x1=0.05500000000000001, y1=0.05500000000000001),
TransformWrapper(
BlendedAffine2D(
IdentityTransform(),
IdentityTransform())))),
BboxTransformTo(
TransformedBbox(
Bbox(x0=0.125, y0=0.10999999999999999, x1=0.9, y1=0.88),
BboxTransformTo(
TransformedBbox(
Bbox(x0=0.0, y0=0.0, x1=6.4, y1=4.8),
Affine2D(
[[ 100. 0. 0.]
[ 0. 100. 0.]
[ 0. 0. 1.]])))))))