Neues in Matplotlib 3.0 (18. September 2018)#

Verbesserte Standard-Backend-Auswahl#

Das Standard-Backend muss nicht mehr als Teil des Build-Prozesses festgelegt werden. Stattdessen werden zur Laufzeit die integrierten Backends nacheinander ausprobiert, bis eines davon importiert wird.

Headless Linux-Server (identifiziert durch die nicht definierte Umgebungsvariable DISPLAY) wählen kein GUI-Backend aus.

Zyklische Colormaps#

Zwei neue Colormaps namens 'twilight' und 'twilight_shifted' wurden hinzugefügt. Diese Colormaps beginnen und enden mit der gleichen Farbe und haben zwei symmetrische Hälften mit gleicher Helligkeit, aber divergierender Farbe. Da sie sich um eine Achse drehen, sind sie eine gute Wahl für zyklische Daten wie Phasenwinkel, Kompassrichtungen oder Tageszeiten. Wie viridis und cividis ist twilight wahrnehmungsuniform und farbenblindfreundlich.

Möglichkeit, Achsen um eine feste Größenordnung zu skalieren#

Um eine Achse um eine feste Größenordnung zu skalieren, setzen Sie das Argument scilimits von Axes.ticklabel_format auf die gleichen (nicht-null) unteren und oberen Grenzen. Um die y-Achse um eine Million (1e6) zu skalieren, verwenden Sie

ax.ticklabel_format(style='sci', scilimits=(6, 6), axis='y')

Das Verhalten von scilimits=(0, 0) bleibt unverändert. Mit dieser Einstellung passt Matplotlib die Größenordnung abhängig von den Achsenwerten an, anstatt sie beizubehalten. Zuvor war das Setzen von scilimits=(m, m) äquivalent zum Setzen von scilimits=(0, 0).

Hinzufügen der AnchoredDirectionArrows-Funktion zu mpl_toolkits#

Eine neue Klasse in mpl_toolkits, AnchoredDirectionArrows, zeichnet ein Paar orthogonale Pfeile, um Richtungen in einem 2D-Plot anzuzeigen. Ein minimales funktionierendes Beispiel nimmt das Transformationsobjekt für das Koordinatensystem (typischerweise ax.transAxes) und Pfeiletiketten auf. Es gibt mehrere optionale Parameter, die zur Änderung des Layouts verwendet werden können. Zum Beispiel können die Pfeilpaare gedreht werden und die Farbe geändert werden. Standardmäßig haben die Etiketten und Pfeile die gleiche Farbe, aber die Klasse kann auch Argumente zur Anpassung des Pfeil- und Textlayouts übergeben, diese werden an matplotlib.textpath.TextPath und matplotlib.patches.FancyArrowPatch übergeben. Position, Länge und Breite für Pfeilschaft und Pfeilspitze können angepasst werden, die Richtungs-Pfeile und Etiketten können einen Rahmen haben. Abstands- und Trennparameter können angepasst werden.

Hinzufügen von minorticks_on()/off()-Methoden für Colorbar#

Eine neue Methode ColorbarBase.minorticks_on wurde hinzugefügt, um Nebenticks auf einer Colorbar korrekt anzuzeigen. Diese Methode erlaubt es nicht, dass die Nebenticks in die Bereiche jenseits von vmin und vmax reichen, wenn das extend-Schlüsselwortargument (das beim Erstellen der Colorbar verwendet wird) auf 'both', 'max' oder 'min' gesetzt ist. Eine ergänzende Methode ColorbarBase.minorticks_off wurde ebenfalls hinzugefügt, um die Nebenticks auf der Colorbar zu entfernen.

Colorbar-Ticks können jetzt automatisch sein#

Die Anzahl der auf Colorbars platzierten Ticks war bisher für eine große Colorbar angemessen, sah aber schlecht aus, wenn die Colorbar kleiner gemacht wurde (z.B. über das shrink-Schlüsselwortargument). Dies wurde geändert, sodass die Anzahl der Ticks nun davon abhängt, wie groß die Colorbar ist.

Keine automatische Umbenennung doppelter Dateinamen mehr#

Zuvor, wenn eine Abbildung mit dem Speicherungsdialog der GUI in eine Datei gespeichert wurde, und der Standarddateiname (basierend auf dem Fenstertitel der Abbildung) bereits auf der Festplatte vorhanden war, fügte Matplotlib ein Suffix hinzu (z.B. Figure_1-1.png), um zu verhindern, dass der Dialog zum Überschreiben auffordert. Dieses Verhalten wurde entfernt. Wenn der Dateiname nun auf der Festplatte existiert, wird der Benutzer gefragt, ob er überschrieben werden soll. Dies eliminiert Rätselraten und ermöglicht ein absichtliches Überschreiben, insbesondere wenn der Abbildungsname manuell über figure.canvas.set_window_title() gesetzt wurde.

Legende hat jetzt ein title_fontsize-Schlüsselwortargument (und rcParam)#

Der Titel einer Figure.legend und Axes.legend kann nun über das title_fontsize-Schlüsselwortargument eingestellt werden. Es gibt auch einen neuen rcParams["legend.title_fontsize"] (Standard: None). Beide sind standardmäßig None, was bedeutet, dass der Legendentitel die gleiche Schriftgröße wie die Standard-Schriftgröße der Achsen hat (nicht die Legenden-Schriftgröße, die durch das fontsize-Schlüsselwortargument oder rcParams["legend.fontsize"] (Standard: 'medium') gesetzt wird).

Unterstützung für das markevery-Attribut von axes.prop_cycle in rcParams#

Das Matplotlib-Objekt rcParams unterstützt nun die Konfiguration des Attributs rcParams["axes.prop_cycle"] (Standard: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])) mit Cyclern, die das markevery-Eigenschaft des Line2D-Objekts verwenden.

Unterstützung für mehrseitige PDF-Dateien für das pgf-Backend#

Das pgf-Backend unterstützt nun auch mehrseitige PDF-Dateien.

from matplotlib.backends.backend_pgf import PdfPages
import matplotlib.pyplot as plt

with PdfPages('multipage.pdf') as pdf:
    # page 1
    plt.plot([2, 1, 3])
    pdf.savefig()

    # page 2
    plt.cla()
    plt.plot([3, 1, 2])
    pdf.savefig()

Tortendiagramme sind nun standardmäßig kreisförmig#

Wir erkennen an, dass die Mehrheit der Menschen keine eiförmigen Torten mag. Daher wird eine Achse, auf der ein Tortendiagramm gezeichnet wird, standardmäßig so eingestellt, dass sie ein gleiches Seitenverhältnis hat. Dies stellt sicher, dass die Torte unabhängig von der Größe oder den Einheiten der Achse kreisförmig erscheint. Um zum vorherigen Verhalten zurückzukehren, setzen Sie das Seitenverhältnis der Achse auf automatisch, indem Sie ax.set_aspect("auto") oder plt.axis("auto") verwenden.

Hinzufügen von ax.get_gridspec zu SubplotBase#

Die neue Methode SubplotBase.get_gridspec wird hinzugefügt, damit Benutzer leicht die GridSpec erhalten können, die zur Erstellung einer Achse verwendet wurde.

import matplotlib.pyplot as plt

fig, axs = plt.subplots(3, 2)
gs = axs[0, -1].get_gridspec()

# remove the last column
for ax in axs[:,-1].flatten():
  ax.remove()

# make a subplot in last column that spans rows.
ax = fig.add_subplot(gs[:, -1])
plt.show()

Achsentitel werden die x-Achse nicht mehr überlappen#

Zuvor musste ein Achsentitel manuell verschoben werden, wenn eine x-Achse überlappte (normalerweise, wenn die x-Achse oben auf der Achse platziert wurde). Nun wird der Titel automatisch über die x-Achse und ihre Dekorateure (einschließlich des x-Labels) verschoben, wenn diese oben sind.

Wenn gewünscht, kann der Titel immer noch manuell platziert werden. Es gibt einen kleinen Trick; der Algorithmus prüft, ob die y-Position des Titels 1.0 (Standard) ist, und verschiebt ihn, wenn dies der Fall ist. Wenn der Benutzer den Titel an der Standardposition platziert (d.h. ax.title.set_position(0.5, 1.0)), wird der Titel immer noch über die x-Achse verschoben. Wenn der Benutzer dies vermeiden möchte, kann er eine Zahl angeben, die nahe liegt (d.h. ax.title.set_position(0.5, 1.01)), und der Titel wird von diesem Algorithmus nicht verschoben.

Neue Komfortmethoden für GridSpec#

Es gibt neue Komfortmethoden für gridspec.GridSpec und gridspec.GridSpecFromSubplotSpec. Anstelle des ersteren können wir nun Figure.add_gridspec und anstelle des letzteren SubplotSpec.subgridspec aufrufen.

import matplotlib.pyplot as plt

fig = plt.figure()
gs0 = fig.add_gridspec(3, 1)
ax1 = fig.add_subplot(gs0[0])
ax2 = fig.add_subplot(gs0[1])
gssub = gs0[2].subgridspec(1, 3)
for i in range(3):
    fig.add_subplot(gssub[0, i])

Figure hat eine add_artist-Methode#

Eine Methode add_artist wurde der Figure-Klasse hinzugefügt, die es ermöglicht, Künstler direkt zu einer Abbildung hinzuzufügen. Z.B.:

circ = plt.Circle((.7, .5), .05)
fig.add_artist(circ)

Falls der hinzugefügte Künstler zuvor keine Transformation gesetzt hatte, wird diese auf die Abbildungstransformation (fig.transFigure) gesetzt. Diese neue Methode kann nützlich sein, um Künstler zu Abbildungen ohne Achsen hinzuzufügen oder um statische Elemente einfach in Abbildungskoordinaten zu positionieren.

:math:-Direktive umbenannt in :mathmpl:#

Die von matplotlib.sphinxext.mathmpl bereitgestellte RST-Rolle :math: wurde in :mathmpl: umbenannt, um Konflikte mit der :math:-Rolle zu vermeiden, die Sphinx 1.8 standardmäßig bereitstellt. (:mathmpl: verwendet Matplotlib, um mathematische Ausdrücke in Bilder zu rendern, die in HTML eingebettet sind, während Sphinx MathJax verwendet.)

Bei Verwendung von Sphinx<1.8 bleiben beide Namen (:math: und :mathmpl:) aus Gründen der Abwärtskompatibilität verfügbar.