matplotlib.path
#
Ein Modul zum Umgang mit den in Matplotlib verwendeten Polylinien.
Die primäre Klasse für die Handhabung von Polylinien in Matplotlib ist Path
. Fast alle Vektorzeichnungen verwenden Path
s irgendwo in der Zeichnungspipeline.
Während eine Path
Instanz selbst nicht gezeichnet werden kann, können einige Artist
Unterklassen, wie z. B. PathPatch
und PathCollection
, zur bequemen Path
Visualisierung verwendet werden.
- Klasse matplotlib.path. Pfad ( vertices , codes = None , _interpolation_steps = 1 , closed = False , readonly = False ) [Quelle] #
Basen:
object
Eine Reihe von möglicherweise getrennten, möglicherweise geschlossenen Linien- und Kurvensegmenten.
Der zugrunde liegende Speicher besteht aus zwei parallelen numpy-Arrays:
Vertices : ein Nx2 Float-Array von Vertices
codes : ein uint8-Array von Pfadcodes der Länge N oder None
Diese beiden Arrays haben in der ersten Dimension immer die gleiche Länge. Um beispielsweise eine kubische Kurve darzustellen, müssen Sie drei Scheitelpunkte und drei
CURVE4
Codes angeben.Die Codearten sind:
STOP
1 Scheitelpunkt (ignoriert)Eine Markierung für das Ende des gesamten Pfads (derzeit nicht erforderlich und ignoriert)
MOVETO
1 ScheitelNehmen Sie den Stift und bewegen Sie sich zum angegebenen Scheitelpunkt.
LINETO
1 ScheitelZeichnen Sie eine Linie von der aktuellen Position zum angegebenen Scheitelpunkt.
CURVE3
1 Kontrollpunkt, 1 EndpunktZeichnen Sie eine quadratische Bezier-Kurve von der aktuellen Position mit dem angegebenen Kontrollpunkt bis zum angegebenen Endpunkt.
CURVE4
2 Kontrollpunkte, 1 EndpunktZeichnen Sie eine kubische Bezier-Kurve von der aktuellen Position mit den angegebenen Kontrollpunkten bis zum angegebenen Endpunkt.
CLOSEPOLY
1 Scheitelpunkt (ignoriert)Zeichnen Sie ein Liniensegment zum Startpunkt der aktuellen Polylinie.
Wenn codes None ist, wird es als
MOVETO
gefolgt von einer Reihe von interpretiertLINETO
.Benutzer von Path-Objekten sollten nicht direkt auf die Vertices- und Code-Arrays zugreifen. Stattdessen sollten sie
iter_segments
oder verwendencleaned
, um die Vertex/Code-Paare zu erhalten. Dies hilft insbesondere, den Fall von Codes , die None sind, konsequent zu behandeln.Einige Verhaltensweisen von Path-Objekten können durch rcParams gesteuert werden. Sehen Sie sich die rcParams an, deren Schlüssel mit 'path.' beginnen.
Notiz
Die Vertices- und Code-Arrays sollten als unveränderlich behandelt werden – im Konstruktor gibt es eine Reihe von Optimierungen und Annahmen, die sich nicht ändern, wenn sich die Daten ändern.
Erstellen Sie einen neuen Pfad mit den angegebenen Scheitelpunkten und Codes.
- Parameter :
- Knoten (N, 2) reihenartig
Die Pfadvertices als Array, maskiertes Array oder Folge von Paaren. Gegebenenfalls maskierte Werte werden in NaNs konvertiert, die dann vom Agg PathIterator und anderen Verbrauchern von Pfaddaten wie
iter_segments()
.- Codes Array-artig oder Keine, optional
Array der Länge N aus ganzen Zahlen, die die Codes des Pfads darstellen. Wenn nicht None, müssen Codes die gleiche Länge haben wie Scheitelpunkte. Wenn keine, werden Scheitelpunkte als eine Reihe von Liniensegmenten behandelt.
- _interpolation_steps int, optional
Wird als Hinweis auf bestimmte Projektionen wie Polar verwendet, dass dieser Pfad unmittelbar vor dem Zeichnen linear interpoliert werden sollte. Dieses Attribut ist in erster Linie ein Implementierungsdetail und nicht für die öffentliche Verwendung vorgesehen.
- geschlossen bool, optional
Wenn Codes None und Closed True ist, werden Scheitelpunkte als Liniensegmente eines geschlossenen Polygons behandelt. Beachten Sie, dass der letzte Scheitelpunkt dann ignoriert wird (da der entsprechende Code auf CLOSEPOLY gesetzt wird).
- readonly bool, optional
Bewirkt, dass sich der Pfad unveränderlich verhält, und legt die Scheitelpunkte und Codes als schreibgeschützte Arrays fest.
- CLOSEPOLY = 79 #
- KURVE3 = 3 #
- KURVE4 = 4 #
- LINETO = 2 #
- MOVETO = 1 #
- NUM_VERTICES_FOR_CODE = {0: 1, 1: 1, 2: 1, 3: 2, 4: 3, 79: 1} #
Ein Wörterbuch, das Pfadcodes auf die Anzahl der Scheitelpunkte abbildet, die der Code erwartet.
- STOP = 0 #
- Klassenmethode arc ( theta1 , theta2 , n = None , is_wedge = False ) [Quelle] #
Geben Sie a
Path
für den Einheitskreisbogen von den Winkeln Theta1 bis Theta2 (in Grad) zurück.Theta2 wird ausgepackt, 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 zu Theta2 – 360 und nicht zu einem vollständigen Kreis plus einer zusätzlichen Überlappung.
Wenn n angegeben wird, ist dies die Anzahl der zu erstellenden Spline-Segmente. Wenn n nicht angegeben wird, wird die Anzahl der Spline-Segmente basierend auf dem Delta zwischen theta1 und theta2 bestimmt .
Masionobe, L. 2003. Zeichnen eines Ellipsenbogens mit Polylinien, quadratischen oder kubischen Bezier-Kurven .
- classmethod circle ( center = (0.0, 0.0) , radius = 1.0 , readonly = False ) [Quelle] #
Gibt ein zurück
Path
, das einen Kreis mit gegebenem Radius und Mittelpunkt darstellt.- Parameter :
- center (float, float), Standard: (0, 0)
Der Mittelpunkt des Kreises.
- Radiusfloat , Standard: 1
Der Radius des Kreises.
- readonly bool
Ob für den erstellten Pfad das Argument „schreibgeschützt“ festgelegt werden soll, wenn die Path-Instanz erstellt wird.
Anmerkungen
Der Kreis wird unter Verwendung von 8 kubischen Bezier-Kurven angenähert, wie in beschrieben
- gereinigt ( transform = None , remove_nans = False , clip = None , * , vereinfachen = False , curves = False , stroke_width = 1.0 , snap = False , sketch = None ) [Quelle] #
Geben Sie einen neuen Pfad mit gemäß den Parametern bereinigten Scheitelpunkten und Codes zurück.
Siehe auch
Path.iter_segments
für Details zu den Schlüsselwortargumenten.
- clip_to_bbox ( bbox , inside = True ) [Quelle] #
Schneiden Sie den Pfad auf den angegebenen Begrenzungsrahmen.
Der Pfad muss aus einem oder mehreren geschlossenen Polygonen bestehen. Dieser Algorithmus verhält sich für nicht geschlossene Pfade nicht korrekt.
Wenn innen ist
True
, an der Innenseite der Schachtel befestigen, andernfalls an der Außenseite der Schachtel.
- code_type #
Pseudonym von
uint8
- Eigenschaftscodes # _
Die Liste der Codes in
Path
als 1D-Nummern-Array. Jeder Code ist einer vonSTOP
,MOVETO
,LINETO
,CURVE3
,CURVE4
oderCLOSEPOLY
. Bei Codes, die mehr als einem Scheitelpunkt (CURVE3
undCURVE4
) entsprechen, wird dieser Code wiederholt, sodass die Länge vonvertices
undcodes
immer gleich ist.
- contains_path ( path , transform = None ) [Quelle] #
Gibt zurück, ob dieser (geschlossene) Pfad den angegebenen Pfad vollständig enthält.
Wenn transform nicht ist
None
, wird der Pfad transformiert, bevor auf Containment geprüft wird.
- contains_point ( point , transform = None , radius = 0.0 ) [Quelle] #
Gibt zurück, ob der vom Pfad eingeschlossene Bereich den angegebenen Punkt enthält.
Der Pfad wird immer als geschlossen behandelt; dh wenn der letzte Code nicht CLOSEPOLY ist, wird ein implizites Segment angenommen, das den letzten Eckpunkt mit dem ersten Eckpunkt verbindet.
- Parameter :
- Punkt (float, float)
Der zu überprüfende Punkt (x, y).
- transformieren
matplotlib.transforms.Transform
, optional Wenn nicht
None
, wird Punkt mitself
transformiert durch transform verglichen ; dh für eine korrekte Überprüfung sollte transform den Pfad in das Koordinatensystem von Punkt transformieren .- Radiusfloat , Standard: 0
Fügen Sie dem Pfad in den Koordinaten des Punktes einen zusätzlichen Rand hinzu . Die Bahn wird tangential um den Radius/2 verlängert ; dh wenn Sie den Pfad mit einer Linienbreite 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 gedachten Linie werden als außerhalb der Fläche betrachtet.
- Rückgaben :
- bool
Anmerkungen
Der aktuelle Algorithmus hat einige Einschränkungen:
Für Punkte genau am Rand (dh an der um Radius/2 verschobenen Bahn ) ist das Ergebnis undefiniert.
Das Ergebnis ist undefiniert, wenn es keine umschlossene Fläche gibt, dh alle Eckpunkte auf einer Geraden liegen.
Wenn sich Begrenzungslinien aufgrund einer Radiusverschiebung zu kreuzen beginnen , ist das Ergebnis nicht garantiert korrekt.
- contains_points ( points , transform = None , radius = 0.0 ) [Quelle] #
Gibt zurück, ob der vom Pfad eingeschlossene Bereich die angegebenen Punkte enthält.
Der Pfad wird immer als geschlossen behandelt; dh wenn der letzte Code nicht CLOSEPOLY ist, wird ein implizites Segment angenommen, das den letzten Eckpunkt mit dem ersten Eckpunkt verbindet.
- Parameter :
- Punkte (N, 2) Array
Die zu prüfenden Punkte. Spalten enthalten x- und y-Werte.
- transformieren
matplotlib.transforms.Transform
, optional Wenn nicht
None
, werden die Punkteself
mit transformiert verglichen ; dh für eine korrekte Überprüfung sollte transform den Pfad in das Koordinatensystem der Punkte transformieren .- Radiusfloat , Standard: 0
Fügen Sie dem Pfad einen zusätzlichen Rand in Punktkoordinaten hinzu . Die Bahn wird tangential um den Radius/2 verlängert ; dh wenn Sie den Pfad mit einer Linienbreite 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 gedachten Linie werden als außerhalb der Fläche betrachtet.
- Rückgaben :
- length-N bool Array
Anmerkungen
Der aktuelle Algorithmus hat einige Einschränkungen:
Für Punkte genau am Rand (dh an der um Radius/2 verschobenen Bahn ) ist das Ergebnis undefiniert.
Das Ergebnis ist undefiniert, wenn es keine umschlossene Fläche gibt, dh alle Eckpunkte auf einer Geraden liegen.
Wenn sich Begrenzungslinien aufgrund einer Radiusverschiebung zu kreuzen beginnen , ist das Ergebnis nicht garantiert korrekt.
- kopieren ( ) [Quelle] #
Geben Sie eine flache Kopie von zurück
Path
, die die Scheitelpunkte und Codes mit der Quelle teiltPath
.
- deepcopy ( memo = None ) [Quelle] #
Geben Sie eine Deepcopy der
Path
. DerPath
wird nicht schreibgeschützt, auch wenn die QuellePath
es ist.
- get_extents ( transform = None , ** kwargs ) [Quelle] #
Holen Sie sich Bbox des Pfades.
- Parameter :
- transform matplotlib.transforms.Transform, optional
Transformieren, um auf den Pfad anzuwenden, bevor Extents berechnet werden, falls vorhanden.
- **Kwarg
Weitergeleitet an
iter_bezier
.
- Rückgaben :
- matplotlib.transforms.Bbox
Die Ausdehnung des Pfades Bbox([[xmin, ymin], [xmax, ymax]])
- Statische Schraffur ( Schraffurmuster , Dichte = 6 ) [Quelle] #
Bei einem gegebenen Schraffurbezeichner erzeugt hatchpattern einen Pfad, der in einem wiederholten Schraffurmuster verwendet werden kann. Dichte ist die Anzahl der Linien pro Quadrateinheit.
- interpoliert ( Schritte ) [Quelle] #
Geben Sie einen neuen Pfad zurück, der auf eine Länge von N x Schritten neu abgetastet wurde.
Andere Codes als LINETO werden nicht korrekt verarbeitet.
- intersects_bbox ( bbox , gefüllt = True ) [Quelle] #
Gibt zurück, ob dieser Pfad eine gegebene schneidet
Bbox
.Wenn gefüllt True ist, dann gibt dies auch True zurück, wenn der Pfad das vollständig umschließt
Bbox
(dh der Pfad wird als gefüllt behandelt).Der Begrenzungsrahmen gilt immer als gefüllt.
- intersects_path ( andere , gefüllt = True ) [Quelle] #
Gibt zurück, ob dieser Pfad einen anderen gegebenen Pfad schneidet.
Wenn gefüllt True ist, dann gibt dies auch True zurück, wenn ein Pfad den anderen vollständig umschließt (dh die Pfade werden als gefüllt behandelt).
- iter_bezier ( ** kwargs ) [Quelle] #
Iterieren Sie über jede Bezierkurve (einschließlich Linien) in einem Pfad.
- Parameter :
- **Kwarg
Weitergeleitet an
iter_segments
.
- Erträge :
- B matplotlib.bezier.BezierSegment
Die Bezierkurven, die den aktuellen Pfad bilden. Beachten Sie insbesondere, dass freistehende Punkte Bezierkurven der Ordnung 0 und Linien Bezierkurven der Ordnung 1 (mit zwei Kontrollpunkten) sind.
- code Pfad.code_typ
Der Code, der beschreibt, welche Art von Kurve zurückgegeben wird. Path.MOVETO, Path.LINETO, Path.CURVE3, Path.CURVE4 entsprechen Bezierkurven mit 1, 2, 3 bzw. 4 Kontrollpunkten. Path.CLOSEPOLY ist ein Path.LINETO mit korrekt ausgewählten Kontrollpunkten basierend auf den Start-/Endpunkten des aktuellen Strichs.
- iter_segments ( transform = None , remove_nans = True , clip = None , snap = False , stroke_width = 1.0 , vereinfachen = None , curves = True , sketch = None ) [Quelle] #
Über alle Kurvensegmente im Pfad iterieren.
Jede Iteration gibt ein Paar zurück , wobei eine Folge von 1–3 Koordinatenpaaren und ein Code ist.
(vertices, code)
vertices
code
Path
Darüber hinaus kann diese Methode eine Reihe von Standardbereinigungen und -konvertierungen für den Pfad bereitstellen.
- Parameter :
- transformieren Keine oder
Transform
Wenn nicht None, wird die angegebene affine Transformation auf den Pfad angewendet.
- remove_nans bool, optional
Ob alle NaNs aus dem Pfad entfernt und mit MOVETO-Befehlen übersprungen werden sollen.
- clip Keine oder (float, float, float, float), optional
Wenn nicht None, muss ein Vierer-Tupel (x1, y1, x2, y2) sein, das ein Rechteck definiert, in dem der Pfad abgeschnitten werden soll.
- snap Keine oder bool, optional
Wenn True, alle Knoten an Pixeln ausrichten; wenn False, schnappen Sie sie nicht. Bei „Keine“ wird gefangen, wenn der Pfad nur Segmente enthält, die parallel zur x- oder y-Achse verlaufen, und nicht mehr als 1024 davon.
- Stroke_width Float, optional
Die Breite des gezeichneten Strichs (wird zum Einrasten von Pfaden verwendet).
- vereinfachen None oder bool, optional
Ob der Pfad vereinfacht werden soll, indem Scheitelpunkte entfernt werden, die sich nicht auf sein Erscheinungsbild auswirken. Wenn keine, verwenden Sie das
should_simplify
Attribut. Siehe auchrcParams["path.simplify"]
(Standard:True
) undrcParams["path.simplify_threshold"]
(Standard:0.111111111111
).- Kurven bool, optional
Bei True werden Kurvensegmente als Kurvensegmente zurückgegeben. Bei False werden alle Kurven in Liniensegmente umgewandelt.
- Skizze Keine oder Sequenz, optional
Wenn nicht None, muss es sich um ein 3-Tupel der Form (Maßstab, Länge, Zufälligkeit) handeln, das die Skizzenparameter darstellt.
- transformieren Keine oder
- Klassenmethode make_compound_path ( * args ) [Quelle] #
Erstellen Sie einen zusammengesetzten Pfad aus einer Liste von
Path
Objekten. Entfernt blind allePath.STOP
Kontrollpunkte.
- Klassenmethode make_compound_path_from_polys ( XY ) [Quelle] #
Erstellen Sie ein zusammengesetztes Pfadobjekt, um eine Anzahl von Polygonen mit gleicher Anzahl von Seiten zu zeichnen. XY ist ein (numpolys x numsides x 2) numpy Array von Scheitelpunkten. Rückgabeobjekt ist eine
Path
.
- Eigenschaft vereinfachen_Schwelle #
Der Bruchteil eines Pixelunterschieds, unterhalb dessen Scheitelpunkte vereinfacht werden.
- to_polygons ( transform = None , width = 0 , height = 0 , closed_only = True ) [Quelle] #
Wandeln Sie diesen Pfad in eine Liste von Polygonen oder Polylinien um. Jedes Polygon/jede Polylinie ist ein Nx2-Array von Scheitelpunkten. Mit anderen Worten, jedes Polygon hat keine
MOVETO
Anweisungen oder Kurven. Dies ist nützlich für die Anzeige in Backends, die zusammengesetzte Pfade oder Bezier-Kurven nicht unterstützen.Wenn Breite und Höhe beide nicht Null sind, werden die Linien vereinfacht, sodass Scheitelpunkte außerhalb von (0, 0), (Breite, Höhe) abgeschnitten werden.
Wenn closed_only
True
(Standard) ist, werden nur geschlossene Polygone zurückgegeben, bei denen der letzte Punkt mit dem ersten Punkt identisch ist . Alle nicht geschlossenen Polylinien im Pfad werden explizit geschlossen. Wenn closed_only istFalse
, werden alle nicht geschlossenen Polygone im Pfad als nicht geschlossene Polygone zurückgegeben, und die geschlossenen Polygone werden explizit geschlossen zurückgegeben, indem der letzte Punkt auf den gleichen Wert wie der erste Punkt gesetzt wird.
- transformiert ( transformieren ) [Quelle] #
Gibt eine transformierte Kopie des Pfads zurück.
Siehe auch
matplotlib.transforms.TransformedPath
Eine spezialisierte Pfadklasse, die das transformierte Ergebnis zwischenspeichert und automatisch aktualisiert, wenn sich die Transformation ändert.
- Klassenmethode unit_circle ( ) [Quelle] #
Gibt den schreibgeschützten Wert
Path
des Einheitskreises zurück.In den meisten Fällen
Path.circle()
wird es das sein, was Sie wollen.
- Klassenmethode unit_circle_righthalf ( ) [Quelle] #
Geben Sie a
Path
der rechten Hälfte eines Einheitskreises zurück.Siehe
Path.circle
für die Referenz zur verwendeten Näherung.
- Klassenmethode unit_rectangle ( ) [Quelle] #
Gibt eine
Path
Instanz des Einheitsrechtecks von (0, 0) bis (1, 1) zurück.
- Klassenmethode unit_regular_asterisk ( numVertices ) [Quelle] #
Gibt ein
Path
für eine Einheit reguläres Sternchen mit der gegebenen numVertices und dem Radius von 1,0 zurück, zentriert bei (0, 0).
- Klassenmethode unit_regular_polygon ( numVertices ) [Quelle] #
Gibt eine
Path
Instanz für ein regelmäßiges Einheitspolygon mit den angegebenen numVertices zurück , sodass der umschreibende Kreis den Radius 1,0 hat und bei (0, 0) zentriert ist.
- Klassenmethode unit_regular_star ( numVertices , innerCircle = 0.5 ) [Quelle] #
Gibt a
Path
für einen regulären Einheitsstern mit der gegebenen numVertices und dem Radius von 1,0 zurück, zentriert bei (0, 0).
- Klassenmethodenkeil ( theta1 , theta2 , n = None ) [Quelle ] #
Geben Sie a
Path
für den Einheitskreiskeil von den Winkeln Theta1 bis Theta2 (in Grad) zurück.Theta2 wird ausgepackt, um den kürzesten Keil innerhalb von 360 Grad zu erzeugen. Das heißt, wenn Theta2 > Theta1 + 360 ist, verläuft der Keil von Theta1 bis Theta2 – 360 und ist kein vollständiger Kreis plus einige zusätzliche Überlappungen.
Wenn n angegeben wird, ist dies die Anzahl der zu erstellenden Spline-Segmente. Wenn n nicht angegeben wird, wird die Anzahl der Spline-Segmente basierend auf dem Delta zwischen theta1 und theta2 bestimmt .
Siehe
Path.arc
für die Referenz zur verwendeten Näherung.
- matplotlib.path. get_path_collection_extents ( master_transform , paths , transforms , offsets , offset_transform ) [Quelle] #
Bei einer gegebenen Folge von
Path
s,Transform
s-Objekten und Offsets, wie sie in a zu findenPathCollection
sind, wird der Begrenzungsrahmen zurückgegeben, der sie alle einschließt.- Parameter :
Anmerkungen
Die Art und Weise, wie Pfade , Transformationen und Offsets kombiniert werden, folgt der gleichen Methode wie für Sammlungen: Jede wird unabhängig iteriert. Wenn Sie also 3 Pfade, 2 Transformationen und 1 Offset haben, sind ihre Kombinationen wie folgt:
(A, A, A), (B, B, A), (C, A, A)