matplotlib.path
#
用于处理整个 Matplotlib 中使用的折线的模块。
Matplotlib 中折线处理的主要类是Path
. Path
几乎所有的矢量绘图都在绘图管道的某个地方使用了s。
虽然Path
无法绘制实例本身,但可以使用一些Artist
子类(例如PathPatch
和PathCollection
)来方便地进行Path
可视化。
- 类 matplotlib.path。路径(顶点,代码=无, _interpolation_steps = 1,关闭=假,只读=假)[来源] #
基地:
object
一系列可能断开的、可能闭合的线段和曲线段。
底层存储由两个并行的 numpy 数组组成:
vertices : 一个 Nx2 浮点数组的顶点
代码:一个 N 长度的 uint8 路径代码数组,或无
这两个数组在第一维中总是具有相同的长度。例如,要表示三次曲线,您必须提供三个顶点和三个
CURVE4
代码。代码类型有:
STOP
1 个顶点(忽略)整个路径结束的标记(当前不需要并且被忽略)
MOVETO
1 个顶点拿起笔并移动到给定的顶点。
LINETO
1 个顶点从当前位置到给定顶点画一条线。
CURVE3
1个控制点,1个端点用给定的控制点从当前位置到给定的终点绘制一条二次贝塞尔曲线。
CURVE4
2个控制点,1个端点用给定的控制点从当前位置到给定的端点绘制一条三次贝塞尔曲线。
CLOSEPOLY
1 个顶点(忽略)在当前折线的起点绘制一条线段。
如果代码为无,则将其解释为 a
MOVETO
后跟一系列LINETO
.Path 对象的用户不应直接访问顶点和代码数组。相反,他们应该使用
iter_segments
orcleaned
来获取顶点/代码对。这尤其有助于始终如一地处理代码为无的情况。Path 对象的某些行为可以由 rcParams 控制。查看其键以“path.”开头的 rcParams。
笔记
顶点和代码数组应该被视为不可变的——在构造函数中预先进行了许多优化和假设,这些优化和假设在数据更改时不会改变。
使用给定的顶点和代码创建一个新路径。
- 参数:
- 顶点(N, 2) 类似数组
路径顶点,作为数组、掩码数组或对序列。掩码值(如果有)将转换为 NaN,然后由 Agg PathIterator 和其他路径数据消费者正确处理,例如
iter_segments()
.- 代码类数组或无,可选
表示路径代码的 N 长度整数数组。如果不是 None,则代码必须与顶点的长度相同。如果没有,顶点将被视为一系列线段。
- _interpolation_steps int,可选
用作对某些投影(例如 Polar)的提示,该路径应在绘制之前立即进行线性插值。此属性主要是一个实现细节,不打算供公众使用。
- 封闭布尔,可选
如果代码为无且闭合为真,则顶点将被视为闭合多边形的线段。请注意,最后一个顶点将被忽略(因为相应的代码将设置为 CLOSEPOLY)。
- 只读bool,可选
使路径以不可变的方式运行,并将顶点和代码设置为只读数组。
- 关闭多头= 79 #
- 曲线3 = 3 #
- 曲线4 = 4 #
- LINETO = 2 #
- 移动= 1 #
- NUM_VERTICES_FOR_CODE = {0: 1, 1: 1, 2: 1, 3: 2, 4: 3, 79: 1} #
将路径代码映射到代码期望的顶点数的字典。
- 停止= 0 #
- classmethod arc ( theta1 , theta2 , n = None , is_wedge = False ) [source] #
从角度theta1到 theta2(以度为单位)返回
Path
单位圆弧的a。theta2被展开以产生 360 度内的最短弧。也就是说,如果theta2 > theta1 + 360,那么弧将从theta1到 theta2 - 360,而不是一个完整的圆加上一些额外的重叠。
如果提供了n,则它是要制作的样条线段数。如果未提供n ,则根据 theta1和theta2之间的增量确定样条线段的数量。
Masionobe, L. 2003。使用折线、二次或三次贝塞尔曲线绘制椭圆弧。
- classmethod circle ( center = (0.0, 0.0) , radius = 1.0 , readonly = False ) [source] #
返回一个
Path
表示给定半径和中心的圆。- 参数:
- 中心(浮点数,浮点数),默认值:(0, 0)
圆的中心。
- 半径浮动,默认值:1
圆的半径。
- 只读布尔
创建 Path 实例时,创建的路径是否应设置“只读”参数。
笔记
该圆使用 8 条三次贝塞尔曲线近似,如中所述
兰开斯特,唐。使用四个贝塞尔三次样条逼近圆或椭圆。
- 已清理(变换=无, remove_nans = False,剪辑=无, *,简化=假,曲线=假,笔画宽度= 1.0,快照=假,草图=无)[来源] #
返回一个新的路径,其中包含根据参数清理的顶点和代码。
也可以看看
Path.iter_segments
有关关键字参数的详细信息。
- clip_to_bbox ( bbox , inside = True ) [source] #
剪辑到给定边界框的路径。
路径必须由一个或多个封闭多边形组成。对于未闭合的路径,此算法将无法正确运行。
如果inside是
True
,则剪辑到盒子的内部,否则剪辑到盒子的外部。
- 代码类型#
的别名
uint8
- 属性 代码#
Path
1D numpy 数组中的代码列表。每个代码都是STOP
、MOVETO
、LINETO
、CURVE3
或CURVE4
之一CLOSEPOLY
。对于对应多个顶点 (CURVE3
和CURVE4
) 的代码,将重复该代码,以使vertices
和的长度codes
始终相同。
- contains_path ( path , transform = None ) [source] #
返回此(封闭)路径是否完全包含给定路径。
如果transform不是
None
,则在检查是否包含之前将转换路径。
- contains_point ( point , transform = None , radius = 0.0 ) [source] #
返回路径包围的区域是否包含给定点。
路径总是被视为封闭的;即,如果最后一个代码不是 CLOSEPOLY,则假定将最后一个顶点连接到第一个顶点的隐式段。
- 参数:
- 点(浮点数,浮点数)
要检查的点 (x, y)。
- 变换
matplotlib.transforms.Transform
,可选 如果不是
None
,则将点self
与transform进行比较;即为了正确检查,transform应该将路径转换为point的坐标系。- 半径浮动,默认值:0
在point坐标中的路径上添加额外的边距。路径沿切向延伸radius/2;即,如果您绘制线宽为radius的路径,则线上的所有点仍将被视为包含在该区域中。相反,负值缩小区域:假想线上的点将被视为区域之外。
- 返回:
- 布尔
笔记
当前算法有一些局限性:
对于恰好在边界处的点(即在移动了radius/2的路径处),结果是不确定的。
如果没有封闭区域,则结果不确定,即所有顶点都在一条直线上。
如果边界线由于半径偏移而开始相互交叉,则不能保证结果是正确的。
- contains_points ( points , transform = None , radius = 0.0 ) [source] #
返回路径包围的区域是否包含给定的点。
路径总是被视为封闭的;即,如果最后一个代码不是 CLOSEPOLY,则假定将最后一个顶点连接到第一个顶点的隐式段。
- 参数:
- 点(N, 2) 数组
要检查的要点。列包含 x 和 y 值。
- 变换
matplotlib.transforms.Transform
,可选 如果不是
None
,则将点self
与transform进行比较;即为了正确检查,transform应该将路径转换为points的坐标系。- 半径浮动,默认值:0
在点坐标中的路径上添加额外的边距。路径沿切向延伸radius/2;即,如果您绘制线宽为radius的路径,则线上的所有点仍将被视为包含在该区域中。相反,负值缩小区域:假想线上的点将被视为区域之外。
- 返回:
- 长度-N 布尔数组
笔记
当前算法有一些局限性:
对于恰好在边界处的点(即在移动了radius/2的路径处),结果是不确定的。
如果没有封闭区域,则结果不确定,即所有顶点都在一条直线上。
如果边界线由于半径偏移而开始相互交叉,则不能保证结果是正确的。
- get_extents ( transform = None , ** kwargs ) [source] #
获取路径的Bbox。
- 参数:
- 变换matplotlib.transforms.Transform,可选
在计算范围之前转换以应用于路径(如果有)。
- **kwargs
转发到
iter_bezier
。
- 返回:
- matplotlib.transforms.Bbox
路径 Bbox([[xmin, ymin], [xmax, ymax]]) 的范围
- intersects_bbox ( bbox , filled = True ) [source] #
返回此路径是否与给定的 相交
Bbox
。如果filled是True,那么如果路径完全包围了
Bbox
(即,路径被视为已填充),这也返回True。边界框始终被视为已填充。
- intersects_path ( other , filled = True ) [source] #
返回此路径是否与另一个给定路径相交。
如果填充为真,则如果一条路径完全包围另一条路径(即,路径被视为已填充),则这也返回真。
- iter_bezier ( ** kwargs ) [来源] #
迭代路径中的每条贝塞尔曲线(包括线)。
- 参数:
- **kwargs
转发到
iter_segments
。
- 产量:
- B matplotlib.bezier.BezierSegment
构成当前路径的贝塞尔曲线。请特别注意,独立点是 0 阶贝塞尔曲线,而直线是 1 阶贝塞尔曲线(带有两个控制点)。
- 代码Path.code_type
描述返回哪种曲线的代码。Path.MOVETO、Path.LINETO、Path.CURVE3、Path.CURVE4 分别对应具有 1、2、3 和 4 个控制点的贝塞尔曲线。Path.CLOSEPOLY 是一个 Path.LINETO,其控制点根据当前笔画的起点/终点正确选择。
- iter_segments(transform = None, remove_nans = True, clip = None, snap = False, stroke_width = 1.0, simplify = None, curve = True, sketch = None)[来源] #
迭代路径中的所有曲线段。
每次迭代都会返回一个 pair ,其中 是 1-3 个坐标对的序列,并且是一个代码。
(vertices, code)
vertices
code
Path
此外,此方法可以为路径提供许多标准清理和转换。
- 参数:
- 转换无或
Transform
如果不是 None,则给定的仿射变换将应用于路径。
- remove_nans bool,可选
是否从路径中删除所有 NaN 并使用 MOVETO 命令跳过它们。
- 剪辑无或(浮动,浮动,浮动,浮动),可选
如果不是 None,则必须是一个四元组 (x1, y1, x2, y2),定义一个矩形,在其中剪切路径。
- snap无或布尔值,可选
如果为真,则将所有节点捕捉到像素;如果为 False,请不要捕捉它们。如果没有,如果路径仅包含平行于 x 或 y 轴的线段,并且不超过 1024 个,则捕捉。
- stroke_width浮动,可选
正在绘制的笔画的宽度(用于路径捕捉)。
- 简化None 或 bool,可选
是否通过删除不影响其外观的顶点来简化路径。如果没有,请使用该
should_simplify
属性。另请参阅rcParams["path.simplify"]
(默认值:)True
和rcParams["path.simplify_threshold"]
(默认值:)0.111111111111
。- 曲线布尔,可选
如果为 True,则曲线段将作为曲线段返回。如果为 False,则所有曲线都将转换为线段。
- 草图无或序列,可选
如果不是 None,则必须是形式的 3 元组(比例、长度、随机性),表示草图参数。
- 转换无或
- 类方法 make_compound_path_from_polys ( XY ) [ source] #
制作一个复合路径对象以绘制多个边数相等的多边形 XY 是一个 (numpolys x numsides x 2) numpy 顶点数组。返回对象是一个
Path
.
- 属性 简化阈值#
一个像素差的分数,低于该分数的顶点将被简化。
- to_polygons ( transform = None , width = 0 , height = 0 , closed_only = True ) [来源] #
将此路径转换为多边形或折线列表。每个多边形/折线是一个 Nx2 顶点数组。换句话说,每个多边形都没有
MOVETO
指令或曲线。这对于在不支持复合路径或贝塞尔曲线的后端显示非常有用。如果宽度和高度都非零,则线条将被简化,以便 (0, 0), (width, height) 之外的顶点被剪裁。
如果closed_only是
True
(默认),则只返回最后一个点与第一个点相同的封闭多边形。路径中任何未闭合的多段线都将显式闭合。如果closed_only是False
,则路径中的任何未闭合多边形都将作为未闭合多边形返回,并且通过将最后一个点设置为与第一个点相同,闭合多边形将显式返回。
- 转换(变换)[来源] #
返回路径的转换副本。
也可以看看
matplotlib.transforms.TransformedPath
一个专门的路径类,它将缓存转换结果并在转换更改时自动更新。
- 类方法 unit_circle ( ) [ source] #
返回单位圆的只读
Path
。在大多数情况下,
Path.circle()
这将是您想要的。
- 类方法 unit_circle_righthalf ( ) [来源] #
返回
Path
单位圆右半部分的 a。有关
Path.circle
所使用的近似值的参考,请参阅。
- 类方法 unit_regular_asterisk ( numVertices ) [来源] #
返回具有
Path
给定 numVertices 和半径为 1.0 的单位常规星号的 a,以 (0, 0) 为中心。
- 类方法 unit_regular_polygon ( numVertices ) [source] #
返回具有给定numVertices
Path
的单位正多边形的实例,使得外接圆的半径为 1.0,以 (0, 0) 为中心。
- matplotlib.path。get_path_collection_extents ( master_transform , paths , transforms , offsets , offset_transform ) [source] #
给定一系列
Path
s、Transform
s 对象和偏移量,如在 a 中找到的PathCollection
,返回封装所有这些的边界框。- 参数:
笔记
路径、变换和偏移的组合方式与集合的方法相同:每个都是独立迭代的,所以如果你有 3 个路径、2 个变换和 1 个偏移,它们的组合如下:
(A, A, A), (B, B, A), (C, A, A)