Was gibt es Neues in Matplotlib 1.4 (25. August 2014)#
Thomas A. Caswell war der Release Manager für das Release 1.4.
Hinweis
Matplotlib 1.4 unterstützt Python 2.6, 2.7, 3.3 und 3.4
Neue Colormap#
In Heatmaps wird oft ein Grün-zu-Rot-Spektrum verwendet, um die Intensität der Aktivität anzuzeigen. Dies kann jedoch für Rot-Grün-Blinde problematisch sein. Eine neue, farbblindenfreundliche Colormap ist jetzt unter matplotlib.cm.Wistia verfügbar. Diese Colormap behält die Rot-Grün-Symbolik bei und ist durch Helligkeitsvariationen für Deuteranopie-Sehbehinderte lesbar. Weitere Informationen finden Sie hier.
Das nbagg Backend#
Phil Elson hat ein neues Backend namens "nbagg" hinzugefügt, das interaktive Grafiken in einer Live-IPython-Notebook-Sitzung ermöglicht. Das Backend nutzt die für das Webagg-Backend entwickelte Infrastruktur, die selbstständige, servergestützte interaktive Grafiken im Browser bereitstellt. Nbagg benötigt jedoch keinen dedizierten Matplotlib-Server, da die gesamte Kommunikation über die IPython Comm-Maschinerie abgewickelt wird.
Wie bei anderen Backends kann nbagg innerhalb des IPython-Notebooks aktiviert werden mit
import matplotlib
matplotlib.use('nbagg')
Sobald Grafiken erstellt und anschließend angezeigt werden, werden sie in einem interaktiven Widget innerhalb des Notebooks platziert, das Panning und Zoomen wie bei jedem anderen Matplotlib-Backend ermöglicht. Da Grafiken für ihre Interaktivität eine Verbindung zum IPython-Notebook-Server benötigen, werden sie nach dem Speichern des Notebooks als statische Bilder gerendert. Dies ermöglicht die nicht-interaktive Ansicht von Grafiken auf Diensten wie nbviewer.
Neue Plotting-Funktionen#
Potenzgesetz-Normalisierung#
Ben Gamari fügte eine Potenzgesetz-Normalisierungsmethode hinzu: PowerNorm. Diese Klasse bildet einen Wertebereich auf das Intervall [0,1] mit einer Potenzgesetz-Skalierung ab, wobei der Exponent durch das Argument gamma des Konstruktors vorgegeben wird. Die Potenzgesetz-Normalisierung kann beispielsweise nützlich sein, um kleine Populationen in einem Histogramm hervorzuheben.
Vollständig anpassbare Boxplots#
Paul Hobson hat die Methode boxplot() überarbeitet, sodass sie nun in Bezug auf Stile und Positionen der einzelnen Künstler vollständig anpassbar ist. Intern stützt sich boxplot() auf eine neue Funktion (boxplot_stats()), die jede derzeit mit boxplot() kompatible Datenstruktur akzeptiert und eine Liste von Dictionaries zurückgibt, die die Positionen für jedes Element der Boxplots enthalten. Anschließend wird eine zweite Methode, bxp, aufgerufen, um die Boxplots basierend auf den Statistiken zu zeichnen.
Die Funktion boxplot() kann wie bisher verwendet werden, um Boxplots aus Daten in einem Schritt zu erstellen. Aber jetzt hat der Benutzer die Flexibilität, die Statistiken unabhängig zu generieren oder die Ausgabe von boxplot_stats() vor dem Plotten mit bxp zu ändern.
Zuletzt kann nun jeder Künstler (z. B. die Box, Ausreißer, Kappe, Kerben) ein- oder ausgeschaltet und seine Stile über individuelle kwargs übergeben werden. Siehe die Beispiele: Künstleranpassung in Boxplots und Separate Berechnung und Darstellung von Boxplots
Es wurde ein boolesches Keyword-Argument manage_xticks hinzugefügt. Wenn dieses auf False gesetzt ist, deaktiviert es die Verwaltung der Ticks und Grenzen auf der x-Achse durch bxp().
Unterstützung für Datumsachsen in 2D-Plots#
Andrew Dawson fügte Unterstützung für Datumsachsen zu contour(), contourf(), pcolormesh() und pcolor() hinzu.
Unterstützung für zusätzliche Spektrumtypen#
Todd Jennings fügte Unterstützung für neue Arten von Frequenzspektrum-Plots hinzu: magnitude_spectrum(), phase_spectrum() und angle_spectrum() sowie entsprechende Funktionen in mlab.
Er fügte diese Spektrumtypen auch zu specgram() hinzu und unterstützte dort lineare Skalierung (zusätzlich zur bestehenden dB-Skalierung). Unterstützung für zusätzliche Spektrumtypen wurde auch zu specgram() hinzugefügt.
Er steigerte auch die Leistung aller dieser Funktionen und Plottypen.
Unterstützung für Detrending und Windowing von 2D-Arrays in mlab#
Todd Jennings fügte Unterstützung für 2D-Arrays in detrend_mean(), detrend_none() und detrend() hinzu und fügte matplotlib.mlab.apply_window hinzu, das das Windowing von 2D-Arrays unterstützt.
Unterstützung für Strides in mlab#
Todd Jennings fügte einige Funktionen zu mlab hinzu, um die Verwendung von NumPy-Strides zur Erstellung speichereffizienter 2D-Arrays zu erleichtern. Dazu gehören matplotlib.mlab.stride_repeat, das ein Array wiederholt, um ein 2D-Array zu erstellen, und matplotlib.mlab.stride_windows, das ein gleitendes Fenster verwendet, um ein 2D-Array aus einem 1D-Array zu erstellen.
Formatter für neue Formatierungsstrings#
Es wurde StrMethodFormatter hinzugefügt, das die gleiche Aufgabe wie FormatStrFormatter erfüllt, aber neue Formatierungsstrings anstelle von printf-ähnlichen Formatierungsstrings akzeptiert.
Konsistente Gittergrößen in Streamplots#
streamplot() verwendet eine Basisgittergröße von 30x30 für sowohl density=1 als auch density=(1, 1). Zuvor wurde für density=1 eine Gittergröße von 30x30 verwendet, aber für density=(1, 1) eine Gittergröße von 25x25.
Liste aller Tick-Labels (Haupt- und Nebenticks) abrufen#
Das Keyword-Argument 'which' wurde zu Axes.get_xticklabels, Axes.get_yticklabels und Axis.get_ticklabels hinzugefügt. 'which' kann 'major', 'minor' oder 'both' sein, um auszuwählen, welche Ticks zurückgegeben werden sollen, ähnlich wie bei set_ticks_position. Wenn 'which' None ist, wird das alte Verhalten (gesteuert durch das Boolesche minor) beibehalten.
Separate horizontale/vertikale Achsenabstandsunterstützung in ImageGrid#
Das Keyword-Argument 'axes_pad' für mpl_toolkits.axes_grid1.axes_grid.ImageGrid kann nun ein Tupel sein, wenn separate horizontale/vertikale Abstände benötigt werden. Dies ist sehr hilfreich, wenn Sie eine beschriftete Legende neben jedem Subplot haben und Platz für die Legendenbeschriftungen benötigen.
Unterstützung für schräge Transformationen#
Affine2D erhielt zusätzliche Methoden skew und skew_deg, um schräge Transformationen zu erstellen. Darüber hinaus wurde die Matplotlib-Interna bereinigt, um die Verwendung solcher Transformationen in Axes zu unterstützen. Diese Transformation ist für einige Plottypen wichtig, insbesondere für den Skew-T in der Meteorologie.
Unterstützung für die Angabe von Eigenschaften von Keilen und Text in Tortendiagrammen.#
Die Keyword-Argumente 'wedgeprops' und 'textprops' wurden zu pie hinzugefügt, um Eigenschaften für Keil- und Textobjekte in einem Tortendiagramm zu akzeptieren. Zum Beispiel können Sie wedgeprops = {'linewidth':3} angeben, um die Dicke der Ränder der Keile im Tortendiagramm festzulegen. Weitere Eigenschaften, die der Benutzer angeben kann, finden Sie in der Dokumentation der Keil- und Textobjekte.
Richtung der oberen/unteren Fehlerbalken-Grenzen behoben#
Larry Bradley hat die Methode errorbar() korrigiert, sodass die oberen und unteren Grenzen (lolims, uplims, xlolims, xuplims) nun in die richtige Richtung zeigen.
Konsistenteres Add-Object-API für Achsen#
Die Achsenmethode add_image wurde hinzugefügt, um die Bildverarbeitung auf Augenhöhe mit Künstlern, Sammlungen, Containern, Linien, Patches und Tabellen zu bringen.
Violin-Plots#
Per Parker, Gregory Kelsie, Adam Ortiz, Kevin Chan, Geoffrey Lee, Deokjae Donald Seo und Taesu Terry Lim haben eine grundlegende Implementierung für Violin-Plots hinzugefügt. Violin-Plots können zur Darstellung der Verteilung von Stichprobendaten verwendet werden. Sie ähneln Boxplots, verwenden aber eine Kernel-Dichteschätzung, um eine glatte Annäherung an die verwendete Datenstichprobe darzustellen. Die hinzugefügten Funktionen sind:
violin - Rendert einen Violin-Plot aus einer Sammlung von Statistiken. violin_stats() - Erzeugt eine Sammlung von Statistiken, die für die Darstellung eines Violin-Plots geeignet sind. violinplot() - Erstellt einen Violin-Plot aus einer Reihe von Stichprobendaten. Diese Methode verwendet violin_stats() zur Verarbeitung der Eingabedaten und violin_stats() zur tatsächlichen Darstellung. Benutzer können auch die Ausgabe von violin_stats() ändern oder ersetzen, um die Violin-Plots nach Belieben anzupassen.
Dieses Feature wurde für einen Software-Engineering-Kurs an der University of Toronto, Scarborough, im Winter 2014 unter der Leitung von Anya Tafliovich implementiert.
Mehr markevery-Optionen zur Anzeige nur einer Teilmenge von Markern#
Rohan Walker hat die markevery-Eigenschaft in Line2D erweitert. Sie können nun eine Teilmenge von Markern mit einer Ganzzahl, einem Slice-Objekt, NumPy-Fancy-Indexing oder einer Gleitkommazahl anzeigen. Die Verwendung einer Gleitkommazahl zeigt Marker in ungefähr gleichen Abständen in Anzeigekoordinaten entlang der Linie an.
Falscher Theta-Wert durch Mauskoordinaten in Polargrafiken behoben#
Es wurde Code zu transform_non_affine hinzugefügt, um sicherzustellen, dass der berechnete Theta-Wert zwischen 0 und 2 * pi liegt, da das Problem darin bestand, dass der Wert nach Anwendung der Richtung und Rotation auf die Theta-Berechnung negativ werden konnte.
Einfacher Quiver-Plot für das mplot3d-Toolkit#
Ein Team von Studenten in einem Kurs über Engineering Large Software Systems, unterrichtet von Prof. Anya Tafliovich an der University of Toronto, implementierte eine einfache Version eines Quiver-Plots im 3D-Raum für das mplot3d-Toolkit als eines ihrer Semesterprojekte. Dieses Feature ist in quiver dokumentiert. Die Teammitglieder sind: Ryan Steve D'Souza, Victor B, xbtsw, Yang Wang, David, Caradec Bisesar und Vlad Vassilovski.
Polar-Plot r-Tick-Positionen#
Die Möglichkeit, die Winkelposition der r-Tick-Labels auf einem Polar-Plot über set_rlabel_position zu steuern, wurde hinzugefügt.
Datumsbehandlung#
N-dimensionale Array-Unterstützung für Datumskonvertierung#
Andrew Dawson fügte Unterstützung für die Verarbeitung von N-dimensionalen Arrays zu matplotlib.dates.num2date(), matplotlib.dates.date2num() und matplotlib.dates.datestr2num() hinzu. Unterstützung wurde auch den Einheitenkonvertierungs-Interfaces matplotlib.dates.DateConverter und matplotlib.units.Registry hinzugefügt.
Konfiguration (rcParams)#
savefig.transparent hinzugefügt#
Steuert, ob Grafiken standardmäßig mit transparentem Hintergrund gespeichert werden. Zuvor hatte savefig immer einen nicht-transparenten Hintergrund.
axes.titleweight#
rcParam hinzugefügt, um das Gewicht des Titels zu steuern.
axes.formatter.useoffset hinzugefügt#
Steuert den Standardwert von useOffset in ScalarFormatter. Wenn True und der Datenbereich viel kleiner als der Datenmittelwert ist, wird ein Offset bestimmt, sodass die Tick-Labels aussagekräftig sind. Wenn False, wird die vollständige Zahl unter allen Bedingungen formatiert.
nbagg.transparent hinzugefügt#
Steuert, ob nbagg-Grafiken einen transparenten Hintergrund haben. nbagg.transparent ist standardmäßig True.
XDG-Konformität#
Matplotlib sucht nun nach Konfigurationsdateien (sowohl rcparams als auch style) an XDG-konformen Speicherorten.
style Paket hinzugefügt#
Sie können nun einfach zwischen verschiedenen Stilen wechseln, indem Sie das neue style-Paket verwenden.
>>> from matplotlib import style
>>> style.use('dark_background')
Nachfolgende Plots verwenden aktualisierte Farben, Größen usw. Um alle verfügbaren Stile aufzulisten, verwenden Sie
>>> print style.available
Sie können Ihre eigenen benutzerdefinierten <style name>.mplstyle-Dateien zu ~/.matplotlib/stylelib hinzufügen oder use mit einer URL aufrufen, die auf eine Datei mit matplotlibrc-Einstellungen verweist.
Beachten Sie, dass dies eine experimentelle Funktion ist und die Schnittstelle sich ändern kann, wenn Benutzer diese neue Funktion testen.
Backends#
Qt5 Backend#
Martin Fitzpatrick und Tom Badran implementierten ein Qt5-Backend. Die Unterschiede in den Namensraum-Speicherorten zwischen Qt4 und Qt5 wurden durch das "Shimmen" von Qt4 so gehandhabt, dass es wie Qt5 aussieht, wodurch die Qt5-Implementierung die primäre Implementierung ist. Die Abwärtskompatibilität für Qt4 wird durch das Umschließen der Qt5-Implementierung aufrechterhalten.
Das Qt5Agg-Backend funktioniert derzeit nicht mit dem %matplotlib Magic von IPython.
Das Release 1.4.0 hat einen bekannten Fehler, bei dem die Symbolleiste defekt ist. Dies kann behoben werden durch
cd path/to/installed/matplotlib
wget https://github.com/matplotlib/matplotlib/pull/3322.diff
# unix2dos 3322.diff (if on windows to fix line endings)
patch -p2 < 3322.diff
Qt4 Backend#
Rudolf Höfler änderte das Erscheinungsbild des Subplot-Tools. Alle Schieberegler sind nun vertikal angeordnet, Schaltflächen für "Tight Layout" und "Reset" wurden hinzugefügt. Darüber hinaus ist das Subplot-Tool nun als modales Dialogfeld implementiert. Zuvor war es ein QMainWindow, wodurch SPT offen blieb, wenn das Plotfenster geschlossen wurde.
Im Dialogfeld "Figure-Optionen" kann nun gewählt werden, eine einfache automatische Legende zu (neu)generieren. Alle explizit gesetzten Legendereinträge gehen verloren, aber Änderungen an den Kurvenbeschriftungen, Linienstilen usw. werden nun in der Legende aktualisiert.
Die interaktive Leistung des Qt4-Backends wurde unter Windows dramatisch verbessert.
Die Zuordnung von Tasten-Signalen von Qt zu Matplotlib-verständlichen Werten wurde stark verbessert (sowohl für Qt4 als auch für Qt5).
Cairo Backends#
Die Cairo-Backends können nun die cairocffi-Bindings verwenden, die aktiver gepflegt werden als die pycairo-Bindings.
Gtk3Agg Backend#
Das Gtk3Agg-Backend funktioniert nun unter Python 3.x, wenn die cairocffi-Bindings installiert sind.
PDF Backend#
Kontextmanager zum Speichern in mehrseitigen PDFs hinzugefügt.
Text#
Text-URLs vom SVG-Backend unterstützt#
Das SVG-Backend rendert nun die URL von Text-Objekten als Link in den ausgegebenen SVGs. Dies ermöglicht das Erstellen von klickbaren Texten in gespeicherten Grafiken über das url-Keyword-Argument der Text-Klasse.
Schriftart für angehängte Größenbalken#
Das Keyword-Argument fontproperties wurde zu AnchoredSizeBar hinzugefügt, um die Schriftarteigenschaften zu steuern.
Sphinx-Erweiterungen#
Die Direktive :context: in der Sphinx-Erweiterung plot_directive kann nun eine optionale Einstellung reset akzeptieren, die dazu führt, dass der Kontext zurückgesetzt wird. Dies ermöglicht mehr als einen einzelnen Kontext in der Dokumentation. Um diese Option zu aktivieren, verwenden Sie :context: reset anstelle von :context:, wann immer Sie den Kontext zurücksetzen möchten.
Dokumentation zu Legend und PathEffects#
Der Legend Guide und der Path Effects Guide wurden beide aktualisiert, um das volle Potenzial jeder dieser leistungsstarken Funktionen besser widerzuspiegeln.
Widgets#
Span Selector#
Eine Option span_stays wurde zu SpanSelector hinzugefügt, die dafür sorgt, dass das Selektorrechteck auf den Achsen verbleibt, nachdem Sie die Maus losgelassen haben.
GAE-Integration#
Matplotlib läuft nun auf Google App Engine.