Was ist neu in Matplotlib 1.3 (01. Aug. 2013)#
Hinweis
Matplotlib 1.3 unterstützt Python 2.6, 2.7, 3.2 und 3.3
Neu in 1.3.1#
1.3.1 ist eine Micro-Version, die sich hauptsächlich mit der Verbesserung der Einrichtung und der Handhabung von Abhängigkeiten befasst sowie die Dokumentation korrigiert und erweitert.
Die folgenden Änderungen wurden in 1.3.1 seit 1.3.0 vorgenommen.
Verbesserungen#
Ein Kontextmanager für die Erstellung mehrseitiger PDFs wurde hinzugefügt (siehe
matplotlib.backends.backend_pdf.PdfPages).Das WebAgg-Backend sollte nun eine geringere Latenz über heterogene Internetverbindungen aufweisen.
Fehlerbehebungen#
Histogramm-Plots enthalten nun die Endlinie.
Korrekturen an der Molleweide-Projektion.
Die Handhabung neuerer Schriften von Microsoft und Macintosh-Schriften mit Nicht-ASCII-Metadaten wurde verbessert.
Das Schraffieren von Füllungen zwischen Plots funktioniert nun im PDF-Backend korrekt.
Unterstützung für eng anliegende Bounding-Boxen funktioniert nun im PGF-Backend.
Transparente Abbildungen werden nun im Qt4Agg-Backend korrekt angezeigt.
Das Zeichnen von Linien von einem Unterplot zu einem anderen funktioniert nun.
Die Einheitenbehandlung bei maskierten Arrays wurde verbessert.
Einrichtung und Abhängigkeiten#
Funktioniert nun mit jeder Version von pyparsing ab 1.5.6, ohne hunderte von Warnungen anzuzeigen.
Funktioniert nun mit 64-Bit-Versionen von Ghostscript unter MS-Windows.
Beim Installieren aus dem Quellcode in einer Umgebung ohne Numpy wird Numpy zuerst heruntergeladen und kompiliert, um dann zum Kompilieren von Matplotlib verwendet zu werden.
Extern installierte Backends werden nun immer über einen vollqualifizierten Pfad zum Modul importiert.
Funktioniert mit neueren Versionen von wxPython.
Kann nun mit einer global auf dem System installierten PyCXX aus dem Quellcode kompiliert werden.
Bessere Erkennung von Gtk3-Abhängigkeiten.
Tests
Tests sollten nun auch in nicht-englischen Locales funktionieren.
PEP8-Konformitätstests melden nun die Speicherorte von Problemen.
Neue Plot-Funktionen#
xkcd-Stil-Skizzen-Plotting#
Um Ihren Plots eine Autorität zu verleihen, die ihnen vielleicht fehlt, hat Michael Droettboom (inspiriert von der Arbeit vieler anderer in PR #1329) einen xkcd-Stil-Zeichenmodus hinzugefügt. Um ihn zu verwenden, rufen Sie einfach matplotlib.pyplot.xkcd auf, bevor Sie Ihren Plot erstellen. Für eine sehr feine Kontrolle können die Skizzenparameter jedes künstlerischen Objekts auch individuell mit matplotlib.artist.Artist.set_sketch_params() modifiziert werden.
Aktualisierte Axes3D.contour-Methoden#
Damon McDougall hat die Methoden tricontour() und tricontourf() aktualisiert, um 3D-Konturplots auf willkürlich unstrukturierten, benutzerdefinierten Triangulationen zu ermöglichen.
Neuer Plot-Typ eventplot#
Todd Jennings hat eine Funktion eventplot() hinzugefügt, um mehrere Zeilen oder Spalten identischer Liniensegmente zu erstellen.
Als Teil dieser Funktion gibt es eine neue Klasse EventCollection, die das Plotten und Manipulieren von Zeilen oder Spalten identischer Liniensegmente ermöglicht.
Interpolation auf dreieckigen Gittern#
Geoffroy Billotey und Ian Thomas haben Klassen zur Durchführung von Interpolationen auf dreieckigen Gittern hinzugefügt: (LinearTriInterpolator und CubicTriInterpolator) und eine Hilfsklasse zum Auffinden der Dreiecke, in denen Punkte liegen (TrapezoidMapTriFinder). Eine Hilfsklasse zur Verfeinerung von Netzen und glatten Konturierungen wurde ebenfalls hinzugefügt (UniformTriRefiner). Schließlich wurde eine Klasse mit einigen grundlegenden Werkzeugen zur Verbesserung von Dreiecksnetzen hinzugefügt (TriAnalyzer).
Baselines für stackplot#
Till Stensitzki hat Nicht-Null-Baselines zu stackplot() hinzugefügt. Diese können symmetrisch oder gewichtet sein.
Rechteckige Farbleisten-Erweiterungen#
Andrew Dawson hat ein neues Schlüsselwortargument *extendrect* zu colorbar() hinzugefügt, um Farbleistenerweiterungen optional rechteckig statt dreieckig zu machen.
Robuster Boxplots#
Paul Hobson hat eine Korrektur an der Methode boxplot() vorgenommen, die verhindert, dass Whisker bei ungleich verteilten Datensätzen innerhalb der Box gezeichnet werden.
Aufruf von subplot() ohne Argumente#
Ein Aufruf von subplot() ohne Argumente verhält sich nun genauso wie subplot(111) oder subplot(1, 1, 1) – er erstellt eine Achse für die gesamte Abbildung. Dies war bereits das Verhalten für sowohl axes() als auch subplots(), und nun wird diese Konsistenz auch mit subplot() geteilt.
Zeichnen#
Unabhängige Alpha-Werte für Vorder- und Kantenfarben#
Wes Campaigne hat die Art und Weise geändert, wie Patch-Objekte gezeichnet werden, so dass (für Backends, die Transparenz unterstützen) unterschiedliche Alpha-Werte für Vorder- und Kantenfarben gesetzt werden können, indem die Farben im RGBA-Format angegeben werden. Beachten Sie, dass, wenn Sie das Alpha-Attribut für das Patch-Objekt setzen (z. B. mit set_alpha() oder dem Schlüsselwortargument alpha), dieser Wert die Alpha-Komponenten überschreiben wird, die sowohl in den Vorder- als auch in den Kantenfarben gesetzt sind.
Pfad-Effekte auf Linien#
Dank Jae-Joon Lee funktionieren Pfad-Effekte nun auch auf Plot-Linien.
Einfachere Erstellung von Colormap und Normalisierer für Ebenen mit Farben#
Phil Elson hat die Funktion matplotlib.colors.from_levels_and_colors() hinzugefügt, um einfach eine Colormap und einen Normalisierer für die Darstellung diskreter Farben für Plot-Typen wie matplotlib.pyplot.pcolormesh() zu erstellen, mit einer ähnlichen Schnittstelle wie bei matplotlib.pyplot.contourf.
Volle Kontrolle über die Hintergrundfarbe#
Wes Campaigne und Phil Elson haben das Agg-Backend so korrigiert, dass PNGs nun mit der korrekten Hintergrundfarbe gespeichert werden, wenn fig.patch.get_alpha() nicht 1 ist.
Verbesserte bbox_inches="tight"-Funktionalität#
Das Übergeben von bbox_inches="tight" an pyplot.savefig berücksichtigt nun *alle* künstlerischen Objekte einer Abbildung – dies war zuvor nicht der Fall und führte zu mehreren Eckfällen, die nicht wie erwartet funktionierten.
Initialisierung eines rotierten Rechtecks#
Damon McDougall hat den Konstruktor von Rectangle um das Schlüsselwortargument *angle* erweitert, das die Rotation eines Rechtecks in Grad angibt.
Text#
Unterstützung für verankerten Text#
Die SVG- und PGF-Backends können nun Textausrichtungsinformationen in ihre Ausgabeformate speichern. Dies ermöglicht die Bearbeitung von Textelementen in gespeicherten Abbildungen, z. B. mit Inkscape, während ihre beabsichtigte Position beibehalten wird. Für SVG beachten Sie bitte, dass Sie die standardmäßige Text-zu-Pfad-Konvertierung deaktivieren müssen (mpl.rc('svg', fonttype='none')).
Bessere vertikale Textausrichtung und mehrzeiliger Text#
Die vertikale Ausrichtung von Text ist nun über alle Backends hinweg konsistent. Es kann zu geringfügigen Unterschieden bei der Textplatzierung kommen, insbesondere bei gedrehtem Text.
Wenn Sie ein benutzerdefiniertes Backend verwenden, beachten Sie, dass die Renderer-Methode draw_text nun den Speicherort der Grundlinie und nicht den Speicherort der Unterseite der Textbegrenzungsbox übergeben bekommt.
Mehrzeiliger Text lässt nun ausreichend Platz für die Höhe von sehr hohen oder sehr niedrigen Texten, wie z. B. Hoch- und Tiefstellungen.
Achsentitel links und rechts#
Andrew Dawson hat die Möglichkeit hinzugefügt, Achsentitel bündig mit der linken und rechten Seite des oberen Rands der Achsen zu platzieren, indem ein neues Schlüsselwortargument *loc* zu title() hinzugefügt wurde.
Verbesserte manuelle Positionierung von Beschriftungen in Konturplots#
Brian Mattern hat den Code zur manuellen Positionierung von Beschriftungen in Konturplots modifiziert, um entlang von Liniensegmenten zu interpolieren und den tatsächlich nächsten Punkt auf einer Kontur zur angeforderten Position zu finden. Zuvor wurde der nächste Scheitelpunkt des Pfades verwendet, der bei geraden Konturen manchmal weit von der angeforderten Position entfernt war. Eine wesentlich präzisere Platzierung von Beschriftungen ist nun möglich.
Konfiguration (rcParams)#
Schnelles Finden von rcParams#
Phil Elson hat die Suche nach rcParameters erleichtert, indem er einen gültigen regulären Ausdruck an matplotlib.RcParams.find_all() übergibt. matplotlib.RcParams hat nun auch eine ansprechende Repräsentation für repr und str, so dass Suchergebnisse ansprechend gedruckt werden.
>>> import matplotlib
>>> print(matplotlib.rcParams.find_all('\.size'))
RcParams({'font.size': 12,
'xtick.major.size': 4,
'xtick.minor.size': 2,
'ytick.major.size': 4,
'ytick.minor.size': 2})
axes.xmargin und axes.ymargin zu rcParams hinzugefügt#
rcParams["axes.xmargin"] (Standard: 0.05) und rcParams["axes.ymargin"] (Standard: 0.05) wurden hinzugefügt, um die standardmäßig verwendeten Ränder zu konfigurieren. Zuvor waren sie auf den Standardwert 0 fest codiert. Der Standardwert beider rcParam-Werte ist 0.
Änderungen an Schriftart-rcParams#
Die font.* rcParams beeinflussen nun nur noch Textobjekte, die nach der Festlegung des rcParams erstellt wurden, und wirken sich nicht mehr rückwirkend auf bereits vorhandene Textobjekte aus. Dies bringt ihr Verhalten mit den meisten anderen rcParams in Einklang.
Hinzufügen von savefig.jpeg_quality rcParam#
Das savefig.jpeg_quality rcParam wurde hinzugefügt, damit der Benutzer die standardmäßige Qualität konfigurieren kann, die beim Speichern einer Abbildung als JPEG verwendet wird. Die Standardqualität ist 95; zuvor betrug die Standardqualität 75. Diese Änderung minimiert die Artefakte, die JPEG-Bildern innewohnen, insbesondere bei Bildern mit scharfen Farbänderungen, wie sie Plots oft aufweisen.
Backends#
WebAgg-Backend#
Michael Droettboom, Phil Elson und andere haben ein neues Backend namens WebAgg entwickelt, um Abbildungen in einem Webbrowser anzuzeigen. Es funktioniert mit Animationen und ist voll interaktiv.
Zukünftige Versionen von Matplotlib werden dieses Backend mit dem IPython-Notebook integrieren, um ein vollständig webbasiertes Frontend für die Plot-Erstellung zu schaffen.
Speicherverzeichnis merken#
Martin Spacek hat den Dialog zum Speichern von Abbildungen dazu gebracht, sich das zuletzt gespeicherte Verzeichnis zu merken. Das Standardverzeichnis kann mit dem neuen rcParams["savefig.directory"] (Standard: '~') rcParam in matplotlibrc konfiguriert werden.
Dokumentation und Beispiele#
Numpydoc-Docstrings#
Nelle Varoquaux hat ein fortlaufendes Projekt gestartet, um die Docstrings von Matplotlib in das Numpydoc-Format zu konvertieren. Weitere Informationen finden Sie unter MEP10.
Umorganisation der Beispiele#
Tony Yu hat mit der Umorganisation der Beispiele in aussagekräftigere Kategorien begonnen. Die neue Galerie-Seite ist das Ergebnis dieser fortlaufenden Arbeit. Weitere Informationen finden Sie unter MEP12.
Beispiele verwenden nun subplots()#
Aus Gründen der Kürze und Klarheit verwenden die meisten Beispiele nun das neuere subplots(), das eine Abbildung und ein (oder mehrere) Achsenobjekt(e) in einem Aufruf erstellt. Die alte Methode beinhaltete einen Aufruf von figure(), gefolgt von einem (oder mehreren) subplot()-Aufrufen.
Infrastruktur#
Aufräumarbeiten#
Eine Reihe von Funktionen, die in 1.2 oder früher als veraltet markiert wurden oder lange Zeit nicht mehr funktionsfähig waren, wurden entfernt. Hervorzuheben sind die Entfernung der Qt-Version 3-Backends sowie der FltkAgg- und Emf-Backends. Eine vollständige Liste finden Sie unter API-Änderungen in 1.3.x.
Neues Setup-Skript#
Matplotlib 1.3 enthält ein komplett überarbeitetes Setup-Skript. Wir liefern nun weniger Abhängigkeiten mit den Tarballs und Installern selbst aus. Insbesondere pytz, dateutil, pyparsing und six sind nicht mehr in Matplotlib enthalten. Sie können diese entweder manuell zuerst installieren oder pip sie als Abhängigkeiten zusammen mit Matplotlib installieren lassen. Es ist nun möglich, bestimmte Unterkomponenten, wie z. B. die Unit-Testdaten, von der Installation auszuschließen. Weitere Informationen finden Sie unter setup.cfg.template.
Unterstützung für XDG-Basisverzeichnisse#
Unter Linux verwendet Matplotlib nun die XDG Base Directory Specification, um die Konfigurationsdatei matplotlibrc zu finden. matplotlibrc sollte nun in ~/.config/matplotlib anstatt in ~/.matplotlib gespeichert werden. Wenn Ihre Konfiguration am alten Speicherort gefunden wird, wird sie weiterhin verwendet, aber eine Warnung angezeigt.
Erkennung von zu vielen geöffneten Abbildungen mit pyplot#
Über pyplot.figure erstellte Abbildungen werden beibehalten, bis sie explizit geschlossen werden. Daher ist es üblich, dass neue Benutzer von Matplotlib den Speicherplatz aufbrauchen, wenn sie eine große Anzahl von Abbildungen in einer Schleife erstellen, ohne sie zu schließen.
Matplotlib zeigt nun eine RuntimeWarning an, wenn zu viele Abbildungen gleichzeitig geöffnet sind. Standardmäßig wird dies für 20 oder mehr Abbildungen angezeigt, aber die genaue Anzahl kann über den figure.max_open_warning rcParam gesteuert werden.