matplotlib.path#
Ein Modul für den Umgang mit den in Matplotlib verwendeten Polylinien.
Die primäre Klasse für die Handhabung von Polylinien in Matplotlib ist Path. Fast alle Vektorgrafiken verwenden Paths irgendwo in der Zeichenpipeline.
Während eine Path-Instanz selbst nicht gezeichnet werden kann, können einige Artist-Unterklassen wie PathPatch und PathCollection zur bequemen Visualisierung von Paths verwendet werden.
- class matplotlib.path.Path(vertices, codes=None, _interpolation_steps=1, closed=False, readonly=False)[Quelle]#
Bases:
objectEine Reihe von möglicherweise getrennten, möglicherweise geschlossenen Linien- und Kurvensegmenten.
Der zugrunde liegende Speicher besteht aus zwei parallelen NumPy-Arrays
vertices: ein (N, 2) Float-Array von Eckpunkten
codes: ein N-langes
numpy.uint8-Array von Pfadcodes oder None
Diese beiden Arrays haben immer die gleiche Länge in der ersten Dimension. Um beispielsweise eine kubische Kurve darzustellen, müssen Sie drei Eckpunkte und drei
CURVE4-Codes angeben.Die Code-Typen sind
STOP1 Eckpunkt (ignoriert)Ein Marker für das Ende des gesamten Pfades (derzeit nicht erforderlich und ignoriert)
MOVETO1 EckpunktHeben Sie den Stift an und bewegen Sie ihn zum angegebenen Eckpunkt.
LINETO1 EckpunktZeichnen Sie eine Linie von der aktuellen Position zum angegebenen Eckpunkt.
CURVE31 Kontrollpunkt, 1 EndpunktZeichnen Sie eine quadratische Bézier-Kurve von der aktuellen Position mit dem angegebenen Kontrollpunkt zum angegebenen Endpunkt.
CURVE42 Kontrollpunkte, 1 EndpunktZeichnen Sie eine kubische Bézier-Kurve von der aktuellen Position mit den angegebenen Kontrollpunkten zum angegebenen Endpunkt.
CLOSEPOLY1 Eckpunkt (ignoriert)Zeichnen Sie ein Liniensegment zum Startpunkt der aktuellen Polylinie.
Wenn codes None ist, wird es als
MOVETOgefolgt von einer Reihe vonLINETOinterpretiert.Benutzer von Path-Objekten sollten nicht direkt auf die Eckpunkt- und Code-Arrays zugreifen. Stattdessen sollten sie
iter_segmentsodercleanedverwenden, um die Eckpunkt/Code-Paare zu erhalten. Dies hilft insbesondere bei der konsistenten Handhabung des Falls, dass codes None ist.Einige Verhaltensweisen von Path-Objekten können durch rcParams gesteuert werden. Siehe die rcParams, deren Schlüssel mit 'path.' beginnen.
Hinweis
Die Eckpunkt- und Code-Arrays sollten als unveränderlich behandelt werden – es gibt eine Reihe von Optimierungen und Annahmen, die im Konstruktor vorgenommen werden und sich bei Datenänderungen nicht ändern.
Erstellen Sie einen neuen Pfad mit den angegebenen Eckpunkten und Codes.
- Parameter:
- vertices(N, 2) array-ähnlich
Die Pfad-Eckpunkte als Array, Masked Array oder Sequenz von Paaren. Maskierte Werte werden gegebenenfalls in NaNs umgewandelt, die dann korrekt von der Agg PathIterator und anderen Verbrauchern von Pfaddaten wie
iter_segments()behandelt werden.- codesarray-ähnlich oder None, optional
N-langes Array von Ganzzahlen, das die Codes des Pfades repräsentiert. Wenn nicht None, müssen codes die gleiche Länge wie vertices haben. Wenn None, werden vertices als eine Reihe von Liniensegmenten behandelt.
- _interpolation_stepsint, optional
Wird als Hinweis an bestimmte Projektionen wie Polar verwendet, dass dieser Pfad unmittelbar vor dem Zeichnen linear interpoliert werden sollte. Dieses Attribut ist primär ein Implementierungsdetail und nicht für den öffentlichen Gebrauch bestimmt.
- closedbool, optional
Wenn codes None ist und closed True ist, werden vertices als Liniensegmente eines geschlossenen Polygons behandelt. Beachten Sie, dass der letzte Eckpunkt dann ignoriert wird (da der entsprechende Code auf
CLOSEPOLYgesetzt wird).- readonlybool, optional
Lässt den Pfad unveränderlich verhalten und setzt die Eckpunkte und Codes als schreibgeschützte Arrays.
- CLOSEPOLY = np.uint8(79)#
- CURVE3 = np.uint8(3)#
- CURVE4 = np.uint8(4)#
- LINETO = np.uint8(2)#
- MOVETO = np.uint8(1)#
- NUM_VERTICES_FOR_CODE = {np.uint8(0): 1, np.uint8(1): 1, np.uint8(2): 1, np.uint8(3): 2, np.uint8(4): 3, np.uint8(79): 1}#
Ein Dictionary, das Pfadcodes der Anzahl der von dem Code erwarteten Eckpunkte zuordnet.
- STOP = np.uint8(0)#
- classmethod arc(theta1, theta2, n=None, is_wedge=False)[Quelle]#
Gibt einen
Pathfür den Einheitskreisbogen von den Winkeln theta1 bis theta2 (in Grad) zurück.theta2 wird entpackt, um den kürzesten Bogen innerhalb von 360 Grad zu erzeugen. Das heißt, wenn theta2 > theta1 + 360 ist, verläuft der Bogen von theta1 bis theta2 - 360 und nicht ein voller Kreis plus eine gewisse Überlappung.
Wenn n angegeben ist, ist dies die Anzahl der zu erzeugenden Spline-Segmente. Wenn n nicht angegeben ist, wird die Anzahl der Spline-Segmente basierend auf der Differenz zwischen theta1 und theta2 bestimmt.
Masionobe, L. 2003. Drawing an elliptical arc using polylines, quadratic or cubic Bezier curves.
- classmethod circle(center=(0.0, 0.0), radius=1.0, readonly=False)[Quelle]#
Gibt einen
Pathzurück, der einen Kreis mit einem gegebenen Radius und Mittelpunkt darstellt.- Parameter:
- center(Float, Float), Standard: (0, 0)
Der Mittelpunkt des Kreises.
- radiusFloat, Standard: 1
Der Radius des Kreises.
- readonlybool
Ob das erstellte Pfadobjekt beim Erstellen der Path-Instanz das Argument "readonly" gesetzt haben soll.
Anmerkungen
Der Kreis wird mit 8 kubischen Bézier-Kurven approximiert, wie beschrieben in
Lancaster, Don. Approximating a Circle or an Ellipse Using Four Bezier Cubic Splines.
- cleaned(transform=None, remove_nans=False, clip=None, *, simplify=False, curves=False, stroke_width=1.0, snap=False, sketch=None)[Quelle]#
Gibt einen neuen
Pathmit bereinigten Eckpunkten und Codes gemäß den Parametern zurück.Siehe auch
Path.iter_segmentsfür Details zu den Schlüsselwortargumenten.
- clip_to_bbox(bbox, inside=True)[Quelle]#
Beschneiden Sie den Pfad auf die angegebene Begrenzungsbox.
Der Pfad muss aus einer oder mehreren geschlossenen Polygonen bestehen. Dieser Algorithmus verhält sich bei ungeöffneten Pfaden nicht korrekt.
Wenn inside
Trueist, wird auf die Innenseite der Box beschnitten, andernfalls auf die Außenseite der Box.
- code_type#
Alias von
uint8
- property codes#
Die Liste der Codes im
Pathals 1D-Array.Jeder Code ist einer von
STOP,MOVETO,LINETO,CURVE3,CURVE4oderCLOSEPOLY. Für Codes, die mehr als einem Eckpunkt entsprechen (CURVE3undCURVE4), wird dieser Code wiederholt, so dass die Länge vonverticesundcodesimmer gleich ist.
- contains_path(path, transform=None)[Quelle]#
Gibt zurück, ob dieser (geschlossene) Pfad den gegebenen Pfad vollständig enthält.
Wenn transform nicht
Noneist, wird der Pfad vor der Containment-Prüfung transformiert.
- contains_point(point, transform=None, radius=0.0)[Quelle]#
Gibt zurück, ob die vom Pfad umschlossene Fläche den gegebenen Punkt enthält.
Der Pfad wird immer als geschlossen behandelt; d. h. wenn der letzte Code nicht
CLOSEPOLYist, wird ein implizites Segment angenommen, das den letzten Eckpunkt mit dem ersten Eckpunkt verbindet.- Parameter:
- point(float, float)
Der zu prüfende Punkt (x, y).
- transform
Transform, optional Wenn nicht
None, wird point mit transform transformiertem self verglichen; d. h. für eine korrekte Prüfung sollte transform den Pfad in das Koordinatensystem von point transformieren.- radiusfloat, default: 0
Zusätzliche Marge am Pfad in Koordinaten von point. Der Pfad wird tangential um radius/2 erweitert; d. h. wenn Sie den Pfad mit einer Liniendicke von radius zeichnen würden, würden alle Punkte auf der Linie immer noch als in der Fläche enthalten betrachtet. Umgekehrt verkleinern negative Werte die Fläche: Punkte auf der imaginären Linie werden als außerhalb der Fläche betrachtet.
- Gibt zurück:
- bool
Anmerkungen
Der aktuelle Algorithmus hat einige Einschränkungen
Das Ergebnis ist undefiniert für Punkte, die sich genau an der Grenze befinden (d. h. am um radius/2 verschobenen Pfad).
Das Ergebnis ist undefiniert, wenn kein umschlossener Bereich vorhanden ist, d. h. alle Eckpunkte liegen auf einer geraden Linie.
Wenn sich Begrenzungslinien aufgrund der radius-Verschiebung kreuzen, ist das Ergebnis nicht garantiert korrekt.
- contains_points(points, transform=None, radius=0.0)[Quelle]#
Gibt zurück, ob die vom Pfad umschlossene Fläche die gegebenen Punkte enthält.
Der Pfad wird immer als geschlossen behandelt; d. h. wenn der letzte Code nicht
CLOSEPOLYist, wird ein implizites Segment angenommen, das den letzten Eckpunkt mit dem ersten Eckpunkt verbindet.- Parameter:
- points(N, 2) Array
Die zu prüfenden Punkte. Spalten enthalten x- und y-Werte.
- transform
Transform, optional Wenn nicht
None, werden points mit transform transformiertem self verglichen; d. h. für eine korrekte Prüfung sollte transform den Pfad in das Koordinatensystem von points transformieren.- radiusfloat, default: 0
Zusätzliche Marge am Pfad in Koordinaten von points. Der Pfad wird tangential um radius/2 erweitert; d. h. wenn Sie den Pfad mit einer Liniendicke von radius zeichnen würden, würden alle Punkte auf der Linie immer noch als in der Fläche enthalten betrachtet. Umgekehrt verkleinern negative Werte die Fläche: Punkte auf der imaginären Linie werden als außerhalb der Fläche betrachtet.
- Gibt zurück:
- Längen-N bool Array
Anmerkungen
Der aktuelle Algorithmus hat einige Einschränkungen
Das Ergebnis ist undefiniert für Punkte, die sich genau an der Grenze befinden (d. h. am um radius/2 verschobenen Pfad).
Das Ergebnis ist undefiniert, wenn kein umschlossener Bereich vorhanden ist, d. h. alle Eckpunkte liegen auf einer geraden Linie.
Wenn sich Begrenzungslinien aufgrund der radius-Verschiebung kreuzen, ist das Ergebnis nicht garantiert korrekt.
- copy()[Quelle]#
Gibt eine flache Kopie des
Pathzurück, die sich die Eckpunkte und Codes mit dem Quell-Pathteilt.
- deepcopy(memo=None)[Quelle]#
Gibt eine tiefe Kopie des
Pathzurück. DerPathist nicht schreibgeschützt, auch wenn der Quell-Pathschreibgeschützt ist.
- get_extents(transform=None, **kwargs)[Quelle]#
BBox des Pfades abrufen.
- Parameter:
- transform
Transform, optional Zu transformieren vor der Berechnung der Extents, falls vorhanden.
- **kwargs
Weitergeleitet an
iter_bezier.
- transform
- Gibt zurück:
- matplotlib.transforms.Bbox
Die Extents des Pfades BBox([[xmin, ymin], [xmax, ymax]])
- static hatch(hatchpattern, density=6)[Quelle]#
Ein
Path, der für ein wiederholtes Schattierungsmuster verwendet werden kann, wird aus einem Schattierungsbezeichner, hatchpattern, generiert. density ist die Anzahl der Linien pro Quadrateinheit.
- interpolated(steps)[Quelle]#
Gibt einen neuen Pfad zurück, bei dem jedes Segment in steps Teile unterteilt ist.
Codes außer
LINETO,MOVETOundCLOSEPOLYwerden nicht korrekt behandelt.- Parameter:
- stepsint
Die Anzahl der Segmente im neuen Pfad für jedes Segment im Original.
- Gibt zurück:
- Path
Der interpolierte Pfad.
- intersects_bbox(bbox, filled=True)[Quelle]#
Gibt zurück, ob dieser Pfad eine gegebene
Bboxschneidet.Wenn filled True ist, gibt dies auch True zurück, wenn der Pfad die
Bboxvollständig umschließt (d. h. der Pfad wird als gefüllt behandelt).Die Begrenzungsbox wird immer als gefüllt betrachtet.
- intersects_path(other, filled=True)[Quelle]#
Gibt zurück, ob dieser Pfad einen anderen gegebenen Pfad schneidet.
Wenn filled True ist, gibt dies auch True zurück, wenn ein Pfad den anderen vollständig umschließt (d. h. die Pfade werden als gefüllt behandelt).
- iter_bezier(**kwargs)[Quelle]#
Iteriert über jede Bézier-Kurve (einschließlich Linien) in einem
Path.- Parameter:
- **kwargs
Weitergeleitet an
iter_segments.
- Yields:
- B
BezierSegment Die Bézier-Kurven, aus denen sich der aktuelle Pfad zusammensetzt. Beachten Sie insbesondere, dass freistehende Punkte Bézier-Kurven vom Grad 0 sind und Linien Bézier-Kurven vom Grad 1 (mit zwei Kontrollpunkten) sind.
- code
code_type Der Code, der beschreibt, welche Art von Kurve zurückgegeben wird.
MOVETO,LINETO,CURVE3undCURVE4entsprechen Bézierkurven mit 1, 2, 3 bzw. 4 Kontrollpunkten.CLOSEPOLYist einLINETOmit den Kontrollpunkten, die korrekt basierend auf den Start-/Endpunkten des aktuellen Strichs gewählt wurden.
- B
- iter_segments(transform=None, remove_nans=True, clip=None, snap=False, stroke_width=1.0, simplify=None, curves=True, sketch=None)[Quelle]#
Iteriert über alle Kurvensegmente im Pfad.
Jede Iteration gibt ein Paar
(vertices, code)zurück, wobeiverticeseine Sequenz von 1-3 Koordinatenpaaren ist undcodeeinPath-Code ist.Zusätzlich kann diese Methode eine Reihe von Standardbereinigungen und Konvertierungen des Pfades durchführen.
- Parameter:
- transformNone oder
Transform Wenn nicht None, wird die gegebene affine Transformation auf den Pfad angewendet.
- remove_nansbool, optional
Ob alle NaNs aus dem Pfad entfernt und mit MOVETO-Befehlen übersprungen werden sollen.
- clipNone oder (float, float, float, float), optional
Wenn nicht None, muss es ein vierfaches Tupel (x1, y1, x2, y2) sein, das ein Rechteck definiert, in dem der Pfad beschnitten werden soll.
- snapNone oder bool, optional
Wenn True, werden alle Knoten an Pixel angepasst; wenn False, werden sie nicht angepasst. Wenn None, wird angepasst, wenn der Pfad nur Segmente parallel zur x- oder y-Achse enthält und nicht mehr als 1024 davon.
- stroke_widthfloat, optional
Die Breite des gezeichneten Strichs (wird für die Pfadanpassung verwendet).
- simplifyNone oder bool, optional
Ob der Pfad vereinfacht werden soll, indem Vertices entfernt werden, die sein Erscheinungsbild nicht beeinflussen. Wenn None, wird das Attribut
should_simplifyverwendet. Siehe auchrcParams["path.simplify"](Standard:True) undrcParams["path.simplify_threshold"](Standard:0.111111111111).- curvesbool, optional
Wenn True, werden Kurvensegmente als Kurvensegmente zurückgegeben. Wenn False, werden alle Kurven in Liniensegmente konvertiert.
- sketchNone oder Sequenz, optional
Wenn nicht None, muss es ein 3-Tupel der Form (scale, length, randomness) sein, das die Sketch-Parameter repräsentiert.
- transformNone oder
- classmethod make_compound_path(*args)[Quelle]#
Verkettet eine Liste von
Path-Objekten zu einem einzelnenPathund entfernt alleSTOPs.
- classmethod make_compound_path_from_polys(XY)[Quelle]#
Erstellt ein zusammengesetztes
Path-Objekt zum Zeichnen einer Anzahl von Polygonen mit gleicher Seitenzahl.
- Parameter:
- XY(numpolys, numsides, 2) Array
- property simplify_threshold#
Der Bruchteil eines Pixelunterschieds, unterhalb dessen Vertices vereinfacht werden.
- to_polygons(transform=None, width=0, height=0, closed_only=True)[Quelle]#
Konvertiert diesen Pfad in eine Liste von Polygonen oder Polylinien. Jedes Polygon/jede Polylinie ist ein (N, 2) Array von Vertices. Mit anderen Worten, jedes Polygon hat keine
MOVETO-Instruktionen oder Kurven. Dies ist nützlich für die Anzeige in Backends, die keine zusammengesetzten Pfade oder Bézierkurven unterstützen.Wenn *width* und *height* beide ungleich Null sind, werden die Linien so vereinfacht, dass Vertices außerhalb von (0, 0), (width, height) beschnitten werden.
Die resultierenden Polygone werden vereinfacht, wenn das Attribut
Path.should_simplifydes PfadesTrueist.Wenn *closed_only*
True(Standard) ist, werden nur geschlossene Polygone zurückgegeben, wobei der letzte Punkt mit dem ersten Punkt übereinstimmt. Alle ungeschlossenen Polylinien im Pfad werden explizit geschlossen. Wenn *closed_only*Falseist, werden alle ungeschlossenen Polygone im Pfad als ungeschlossene Polygone zurückgegeben und die geschlossenen Polygone werden explizit geschlossen, indem der letzte Punkt mit dem ersten Punkt gleichgesetzt wird.
- transformed(transform)[Quelle]#
Gibt eine transformierte Kopie des Pfades zurück.
Siehe auch
matplotlib.transforms.TransformedPathEine spezialisierte Pfadklasse, die das transformierte Ergebnis zwischenspeichert und automatisch aktualisiert, wenn sich die Transformation ändert.
- classmethod unit_circle()[Quelle]#
Gibt den schreibgeschützten
Pathdes Einheitskreises zurück.In den meisten Fällen ist
Path.circle()das, was Sie wollen.
- classmethod unit_circle_righthalf()[Quelle]#
Gibt einen
Pathder rechten Hälfte eines Einheitskreises zurück.Siehe
Path.circlefür den Hinweis auf die verwendete Approximation.
- classmethod unit_rectangle()[Quelle]#
Gibt eine
Path-Instanz des Einheitsrechtecks von (0, 0) bis (1, 1) zurück.
- classmethod unit_regular_asterisk(numVertices)[Quelle]#
Gibt einen
Pathfür ein Einheits-reguläres Sternchen mit der gegebenen Anzahl von Vertices und einem Radius von 1,0 zurück, zentriert auf (0, 0).
- classmethod unit_regular_polygon(numVertices)[Quelle]#
Gibt eine
Path-Instanz für ein Einheits-reguläres Polygon mit der gegebenen Anzahl von numVertices zurück, sodass der umschriebene Kreis den Radius 1,0 hat und auf (0, 0) zentriert ist.
- classmethod unit_regular_star(numVertices, innerCircle=0.5)[Quelle]#
Gibt einen
Pathfür einen Einheits-regulären Stern mit der gegebenen Anzahl von Vertices und einem Radius von 1,0 zurück, zentriert auf (0, 0).
- classmethod wedge(theta1, theta2, n=None)[Quelle]#
Gibt einen
Pathfür den Einheitskreis-Keil von den Winkeln *theta1* bis *theta2* (in Grad) zurück.theta2 wird entrollt, um den kürzesten Keil innerhalb von 360 Grad zu erzeugen. Das heißt, wenn *theta2* > *theta1* + 360 ist, wird der Keil von *theta1* bis *theta2* - 360 reichen und kein voller Kreis mit einer zusätzlichen Überlappung.
Wenn n angegeben ist, ist dies die Anzahl der zu erzeugenden Spline-Segmente. Wenn n nicht angegeben ist, wird die Anzahl der Spline-Segmente basierend auf der Differenz zwischen theta1 und theta2 bestimmt.
Siehe
Path.arcfür den Hinweis auf die verwendete Approximation.
- matplotlib.path.get_path_collection_extents(master_transform, paths, transforms, offsets, offset_transform)[Quelle]#
Ermittelt die Bounding Box der internen Objekte einer
PathCollection.Das heißt, gegeben eine Sequenz von
Paths,Transform-Objekten und Offsets, wie sie in einerPathCollectiongefunden werden, wird die Bounding Box zurückgegeben, die sie alle umschließt.- Parameter:
- master_transform
Transform Globale Transformation, die auf alle Pfade angewendet wird.
- pathsListe von
Path - transformsListe von
Affine2DBase Wenn nicht leer, überschreibt dies master_transform.
- offsets(N, 2) Array-ähnlich
- offset_transform
Affine2DBase Transformation, die auf die Offsets angewendet wird, bevor der Pfad versetzt wird.
- master_transform
Anmerkungen
Die Art und Weise, wie paths, transforms und offsets kombiniert werden, folgt der gleichen Methode wie bei Collections: Jede wird unabhängig durchlaufen. Wenn Sie also 3 Pfade (A, B, C), 2 Transformationen (α, β) und 1 Offset (O) haben, sind ihre Kombinationen wie folgt:
(A, α, O)
(B, β, O)
(C, α, O)