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: 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 (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 Eckpunkt

    Heben Sie den Stift an und bewegen Sie ihn zum angegebenen Eckpunkt.

  • LINETO1 Eckpunkt

    Zeichnen Sie eine Linie von der aktuellen Position zum angegebenen Eckpunkt.

  • CURVE31 Kontrollpunkt, 1 Endpunkt

    Zeichnen Sie eine quadratische Bézier-Kurve von der aktuellen Position mit dem angegebenen Kontrollpunkt zum angegebenen Endpunkt.

  • CURVE42 Kontrollpunkte, 1 Endpunkt

    Zeichnen 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 MOVETO gefolgt von einer Reihe von LINETO interpretiert.

Benutzer von Path-Objekten sollten nicht direkt auf die Eckpunkt- und Code-Arrays zugreifen. Stattdessen sollten sie iter_segments oder cleaned verwenden, 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 CLOSEPOLY gesetzt 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 Path fü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.

classmethod circle(center=(0.0, 0.0), radius=1.0, readonly=False)[Quelle]#

Gibt einen Path zurü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

cleaned(transform=None, remove_nans=False, clip=None, *, simplify=False, curves=False, stroke_width=1.0, snap=False, sketch=None)[Quelle]#

Gibt einen neuen Path mit bereinigten Eckpunkten und Codes gemäß den Parametern zurück.

Siehe auch

Path.iter_segments

fü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 True ist, 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 Path als 1D-Array.

Jeder Code ist einer von STOP, MOVETO, LINETO, CURVE3, CURVE4 oder CLOSEPOLY. Für Codes, die mehr als einem Eckpunkt entsprechen (CURVE3 und CURVE4), wird dieser Code wiederholt, so dass die Länge von vertices und codes immer 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 None ist, 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 CLOSEPOLY ist, 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).

transformTransform, 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 CLOSEPOLY ist, 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.

transformTransform, 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 Path zurück, die sich die Eckpunkte und Codes mit dem Quell-Path teilt.

deepcopy(memo=None)[Quelle]#

Gibt eine tiefe Kopie des Path zurück. Der Path ist nicht schreibgeschützt, auch wenn der Quell-Path schreibgeschützt ist.

get_extents(transform=None, **kwargs)[Quelle]#

BBox des Pfades abrufen.

Parameter:
transformTransform, optional

Zu transformieren vor der Berechnung der Extents, falls vorhanden.

**kwargs

Weitergeleitet an iter_bezier.

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, MOVETO und CLOSEPOLY werden 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 Bbox schneidet.

Wenn filled True ist, gibt dies auch True zurück, wenn der Pfad die Bbox vollstä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:
BBezierSegment

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.

codecode_type

Der Code, der beschreibt, welche Art von Kurve zurückgegeben wird. MOVETO, LINETO, CURVE3 und CURVE4 entsprechen Bézierkurven mit 1, 2, 3 bzw. 4 Kontrollpunkten. CLOSEPOLY ist ein LINETO mit den Kontrollpunkten, die korrekt basierend auf den Start-/Endpunkten des aktuellen Strichs gewählt wurden.

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, wobei vertices eine Sequenz von 1-3 Koordinatenpaaren ist und code ein Path-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_simplify verwendet. Siehe auch rcParams["path.simplify"] (Standard: True) und rcParams["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.

classmethod make_compound_path(*args)[Quelle]#

Verkettet eine Liste von Path-Objekten zu einem einzelnen Path und entfernt alle STOPs.

classmethod make_compound_path_from_polys(XY)[Quelle]#

Erstellt ein zusammengesetztes Path-Objekt zum Zeichnen einer Anzahl von Polygonen mit gleicher Seitenzahl.

(Quellcode, 2x.png, png)

(2x.png, png)

Parameter:
XY(numpolys, numsides, 2) Array
property readonly#

True, wenn der Path schreibgeschützt ist.

property should_simplify#

True, wenn das Vertex-Array vereinfacht werden soll.

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_simplify des Pfades True ist.

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* False ist, 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.TransformedPath

Eine spezialisierte Pfadklasse, die das transformierte Ergebnis zwischenspeichert und automatisch aktualisiert, wenn sich die Transformation ändert.

classmethod unit_circle()[Quelle]#

Gibt den schreibgeschützten Path des Einheitskreises zurück.

In den meisten Fällen ist Path.circle() das, was Sie wollen.

classmethod unit_circle_righthalf()[Quelle]#

Gibt einen Path der rechten Hälfte eines Einheitskreises zurück.

Siehe Path.circle fü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 Path fü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 Path für einen Einheits-regulären Stern mit der gegebenen Anzahl von Vertices und einem Radius von 1,0 zurück, zentriert auf (0, 0).

property vertices#

Die Vertices des Path als (N, 2) Array.

classmethod wedge(theta1, theta2, n=None)[Quelle]#

Gibt einen Path fü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.arc fü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 einer PathCollection gefunden werden, wird die Bounding Box zurückgegeben, die sie alle umschließt.

Parameter:
master_transformTransform

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_transformAffine2DBase

Transformation, die auf die Offsets angewendet wird, bevor der Pfad versetzt wird.

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)