matplotlib.transforms
#
Matplotlib 包含一个用于任意几何变换的框架,该框架用于确定画布上所有绘制元素的最终位置。
变换被组合成TransformNode
对象的树形结构,其实际值取决于它们的子节点。当子节点内容改变时,它们的父节点会自动失效。下次访问失效的变换时,它会被重新计算以反映这些改变。这种失效/缓存方法防止了不必要的变换重新计算,有助于提升交互性能。
例如,这是用于在图中绘制数据的变换树图:
该框架可用于仿射变换和非仿射变换。然而,为了提高速度,我们希望尽可能使用后端渲染器来执行仿射变换。因此,可以在一组数据上仅执行变换的仿射或非仿射部分。仿射变换总是假定在非仿射变换之后发生。对于任何变换,
full transform == non-affine part + affine part
后端本身不应处理非仿射变换。
有关如何使用变换的示例,请参阅教程变换教程。
- class matplotlib.transforms.Affine2D(matrix=None, **kwargs)[source]#
基类:
Affine2DBase
一个可变的二维仿射变换。
从一个3x3的numpy浮点数组初始化一个仿射变换。
a c e b d f 0 0 1
如果matrix为None,则使用单位变换进行初始化。
- rotate(theta)[source]#
原地为此变换添加一个旋转(弧度)。
返回self,因此此方法可以轻松地与对
rotate()
、rotate_deg()
、translate()
和scale()
的更多调用进行链式操作。
- rotate_around(x, y, theta)[source]#
原地围绕点(x, y)添加一个旋转(弧度)。
返回self,因此此方法可以轻松地与对
rotate()
、rotate_deg()
、translate()
和scale()
的更多调用进行链式操作。
- rotate_deg(degrees)[source]#
原地为此变换添加一个旋转(度)。
返回self,因此此方法可以轻松地与对
rotate()
、rotate_deg()
、translate()
和scale()
的更多调用进行链式操作。
- rotate_deg_around(x, y, degrees)[source]#
原地围绕点(x, y)添加一个旋转(度)。
返回self,因此此方法可以轻松地与对
rotate()
、rotate_deg()
、translate()
和scale()
的更多调用进行链式操作。
- scale(sx, sy=None)[source]#
原地添加一个缩放。
如果sy为None,则在x和y方向上应用相同的缩放比例。
返回self,因此此方法可以轻松地与对
rotate()
、rotate_deg()
、translate()
和scale()
的更多调用进行链式操作。
- set(other)[source]#
从另一个
Affine2DBase
对象的冻结副本设置此变换。
- skew(xShear, yShear)[source]#
原地添加一个倾斜。
xShear和yShear分别是沿x轴和y轴的剪切角,单位为弧度。
返回self,因此此方法可以轻松地与对
rotate()
、rotate_deg()
、translate()
和scale()
的更多调用进行链式操作。
- skew_deg(xShear, yShear)[source]#
原地添加一个倾斜。
xShear和yShear分别是沿x轴和y轴的剪切角,单位为度。
返回self,因此此方法可以轻松地与对
rotate()
、rotate_deg()
、translate()
和scale()
的更多调用进行链式操作。
- translate(tx, ty)[source]#
原地添加一个平移。
返回self,因此此方法可以轻松地与对
rotate()
、rotate_deg()
、translate()
和scale()
的更多调用进行链式操作。
- class matplotlib.transforms.Affine2DBase(*args, **kwargs)[source]#
基类:
AffineBase
所有二维仿射变换的基类。
二维仿射变换使用3x3的numpy数组执行。
a c e b d f 0 0 1
此类提供只读接口。对于可变的二维仿射变换,请使用
Affine2D
。此类的子类通常只需重写一个构造函数和生成自定义3x3矩阵的
get_matrix
。- 参数:
- shorthand_namestr
表示变换“名称”的字符串。除了在DEBUG=True时提高
str(transform)
的可读性之外,此名称没有其他意义。
- has_inverse = True#
如果此变换具有相应的逆变换,则为 True。
- input_dims = 2#
此变换的输入维度数量。必须在子类中重写(使用整数)。
- inverted()[source]#
返回相应的逆变换。
它满足
x == self.inverted().transform(self.transform(x))
。此方法的返回值应被视为临时值。对 self 的更新不会导致其逆副本的相应更新。
- property is_separable#
当参数为真时返回 True,否则返回 False。内置的 True 和 False 是 bool 类的仅有的两个实例。bool 类是 int 类的子类,不能被子类化。
- output_dims = 2#
此变换的输出维度数量。必须在子类中重写(使用整数)。
- transform_affine(values)[source]#
仅对此变换的仿射部分应用于给定值数组。
transform(values)
始终等价于transform_affine(transform_non_affine(values))
。在非仿射变换中,这通常是一个空操作。在仿射变换中,这等同于
transform(values)
。- 参数:
- values数组
输入值是长度为
input_dims
或形状为(N,input_dims
)的数组。
- 返回:
- 数组
输出值是长度为
output_dims
或形状为(N,output_dims
)的数组,具体取决于输入。
- class matplotlib.transforms.AffineBase(*args, **kwargs)[source]#
基类:
Transform
任意维度仿射变换的基类。
- 参数:
- shorthand_namestr
表示变换“名称”的字符串。除了在DEBUG=True时提高
str(transform)
的可读性之外,此名称没有其他意义。
- is_affine = True#
- transform(values)[source]#
将此变换应用于给定的values数组。
- 参数:
- values类数组
输入值是长度为
input_dims
或形状为(N,input_dims
)的数组。
- 返回:
- 数组
输出值是长度为
output_dims
或形状为(N,output_dims
)的数组,具体取决于输入。
- transform_affine(values)[source]#
仅对此变换的仿射部分应用于给定值数组。
transform(values)
始终等价于transform_affine(transform_non_affine(values))
。在非仿射变换中,这通常是一个空操作。在仿射变换中,这等同于
transform(values)
。- 参数:
- values数组
输入值是长度为
input_dims
或形状为(N,input_dims
)的数组。
- 返回:
- 数组
输出值是长度为
output_dims
或形状为(N,output_dims
)的数组,具体取决于输入。
- transform_non_affine(values)[source]#
仅应用此变换的非仿射部分。
transform(values)
始终等价于transform_affine(transform_non_affine(values))
。在非仿射变换中,这通常等价于
transform(values)
。在仿射变换中,这始终是一个空操作。- 参数:
- values数组
输入值是长度为
input_dims
或形状为(N,input_dims
)的数组。
- 返回:
- 数组
输出值是长度为
output_dims
或形状为(N,output_dims
)的数组,具体取决于输入。
- class matplotlib.transforms.AffineDeltaTransform(transform, **kwargs)[source]#
基类:
Affine2DBase
一个用于转换点对之间位移的变换包装器。
此类旨在用于转换点对之间的位移(“位置增量”)(例如,作为
Collection
的offset_transform
):给定变换t
,使得t = AffineDeltaTransform(t) + offset
,AffineDeltaTransform
满足AffineDeltaTransform(a - b) == AffineDeltaTransform(a) -
AffineDeltaTransform(b)
。这是通过将变换矩阵的偏移分量强制设为零来实现的。
自3.3版本起,此类为实验性,其API可能会发生变化。
- 参数:
- shorthand_namestr
表示变换“名称”的字符串。除了在DEBUG=True时提高
str(transform)
的可读性之外,此名称没有其他意义。
- pass_through = True#
如果pass_through为True,则所有祖先将始终失效,即使“自身”已经失效。
- class matplotlib.transforms.Bbox(points, **kwargs)[source]#
基类:
BboxBase
一个可变边界框。
示例
从已知边界创建
默认构造函数接受边界“点”
[[xmin, ymin], [xmax, ymax]]
。>>> Bbox([[1, 1], [3, 7]]) Bbox([[1.0, 1.0], [3.0, 7.0]])
或者,Bbox可以从扁平化的点数组创建,即所谓的“范围”
(xmin, ymin, xmax, ymax)
>>> Bbox.from_extents(1, 1, 3, 7) Bbox([[1.0, 1.0], [3.0, 7.0]])
或从“边界”
(xmin, ymin, width, height)
创建。>>> Bbox.from_bounds(1, 1, 2, 6) Bbox([[1.0, 1.0], [3.0, 7.0]])
从点集合创建
用于累积Bbox的“空”对象是空边界框(null bbox),它代表空集。
>>> Bbox.null() Bbox([[inf, inf], [-inf, -inf]])
向空边界框添加点将得到这些点的边界框。
>>> box = Bbox.null() >>> box.update_from_data_xy([[1, 1]]) >>> box Bbox([[1.0, 1.0], [1.0, 1.0]]) >>> box.update_from_data_xy([[2, 3], [3, 2]], ignore=False) >>> box Bbox([[1.0, 1.0], [3.0, 3.0]])
设置
ignore=True
等同于从空边界框重新开始。>>> box.update_from_data_xy([[1, 1]], ignore=True) >>> box Bbox([[1.0, 1.0], [1.0, 1.0]])
警告
建议始终明确指定
ignore
。否则,ignore
的默认值可能随时被可访问您的Bbox的代码更改,例如使用ignore
方法。``null`` 边界框的属性
注意
Bbox.null()
的当前行为可能令人惊讶,因为它不具备“空集”的所有属性,因此在数学意义上不像一个“零”对象。我们将来可能会改变这一点(会有一个废弃期)。空边界框是交集的恒等元
>>> Bbox.intersection(Bbox([[1, 1], [3, 7]]), Bbox.null()) Bbox([[1.0, 1.0], [3.0, 7.0]])
除了与自身相交时,它会返回完整空间。
>>> Bbox.intersection(Bbox.null(), Bbox.null()) Bbox([[-inf, -inf], [inf, inf]])
包含null的并集将始终返回完整空间(而非另一个集合!)。
>>> Bbox.union([Bbox([[0, 0], [0, 0]]), Bbox.null()]) Bbox([[-inf, -inf], [inf, inf]])
- 参数:
- points
ndarray
一个(2, 2)形式的数组,如
[[x0, y0], [x1, y1]]
。
- points
- static from_bounds(x0, y0, width, height)[source]#
根据 x0、y0、width 和 height 创建一个新的
Bbox
。width 和 height 可以是负数。
- static from_extents(*args, minpos=None)[source]#
根据 left、bottom、right 和 top 创建一个新的 Bbox。
y 轴向上增加。
- 参数:
- left, bottom, right, topfloat
边界框的四个边界。
- minposfloat 或 None
如果提供了此参数,Bbox 将设置一个最小正值。这在处理对数刻度以及负边界导致浮点误差的其他刻度时非常有用。
- ignore(value)[source]#
设置后续调用
update_from_data_xy()
时是否忽略现有边界框的边界。- valuebool
当为
True
时,后续对update_from_data_xy
的调用将忽略Bbox
的现有边界。当为
False
时,后续对update_from_data_xy
的调用将包含Bbox
的现有边界。
- property intervalx#
定义边界框的一对 x 坐标。
这不保证从左到右排序。
- property intervaly#
定义边界框的一对 y 坐标。
这不保证从下到上排序。
- property minpos#
Bbox 中两个方向上的最小正值。
这在处理对数刻度以及负边界导致浮点误差的其他刻度时非常有用,并且将用作最小范围而不是 p0。
- property minposx#
Bbox 中 x 方向上的最小正值。
这在处理对数刻度以及负边界导致浮点误差的其他刻度时非常有用,并且将用作最小 x 范围而不是 x0。
- property minposy#
Bbox 中 y 方向上的最小正值。
这在处理对数刻度以及负边界导致浮点误差的其他刻度时非常有用,并且将用作最小 y 范围而不是 y0。
- property p0#
定义边界框的第一对 (x, y) 坐标。
这不保证是左下角(为此,请使用
min
)。
- property p1#
定义边界框的第二对 (x, y) 坐标。
这不保证是右上角(为此,请使用
max
)。
- update_from_data_xy(xy, ignore=None, updatex=True, updatey=True)[source]#
根据传入的 xy 坐标更新
Bbox
边界。更新后,边界将具有正 width 和 height;x0 和 y0 将是最小值。
- class matplotlib.transforms.BboxBase(shorthand_name=None)[source]#
-
所有边界框的基类。
此类是不可变的;
Bbox
是一个可变的子类。规范表示为两个点,对其顺序没有限制。提供了方便的属性来获取左、下、右、上边缘以及宽度和高度,但这些不被显式存储。
- 参数:
- shorthand_namestr
表示变换“名称”的字符串。除了在DEBUG=True时提高
str(transform)
的可读性之外,此名称没有其他意义。
- coefs = {'C': (0.5, 0.5), 'E': (1.0, 0.5), 'N': (0.5, 1.0), 'NE': (1.0, 1.0), 'NW': (0, 1.0), 'S': (0.5, 0), 'SE': (1.0, 0), 'SW': (0, 0), 'W': (0, 0.5)}#
- property height#
边界框的(有符号)高度。
- property intervalx#
定义边界框的一对 x 坐标。
这不保证从左到右排序。
- property intervaly#
定义边界框的一对 y 坐标。
这不保证从下到上排序。
- is_affine = True#
- is_bbox = True#
- property max#
边界框的右上角。
- property min#
边界框的左下角。
- padded(w_pad, h_pad=None)[source]#
通过在所有四边填充来构造一个
Bbox
。- 参数:
- w_padfloat
宽度填充
- h_padfloat, 可选
高度填充。默认为 w_pad。
- shrunk(mx, my)[source]#
返回
Bbox
的副本,在 x 方向上按因子 mx 缩小,在 y 方向上按因子 my 缩小。框的左下角保持不变。通常 mx 和 my 将小于 1,但这不是强制性的。
- shrunk_to_aspect(box_aspect, container=None, fig_aspect=1.0)[source]#
返回
Bbox
的副本,其大小被缩小,使其在具有所需纵横比 box_aspect 的同时尽可能大。如果框坐标是相对的(即,像图形这样的大框的分数),则使用 fig_aspect 指定该图形的物理纵横比,以便 box_aspect 也可以以绝对维度而非相对维度的比率给出。
- property size#
边界框的(有符号)宽度和高度。
- property width#
边界框的(有符号)宽度。
- property xmax#
边界框的右边缘。
- property xmin#
边界框的左边缘。
- property ymax#
边界框的顶边缘。
- property ymin#
边界框的底边缘。
- class matplotlib.transforms.BboxTransform(boxin, boxout, **kwargs)[source]#
基类:
Affine2DBase
BboxTransform
将点从一个Bbox
线性变换到另一个。创建一个新的
BboxTransform
,它将点从 boxin 线性变换到 boxout。- is_separable = True#
如果此变换在 x 和 y 维度上可分离,则为 True。
- class matplotlib.transforms.BboxTransformFrom(boxin, **kwargs)[source]#
基类:
Affine2DBase
BboxTransformFrom
将点从给定的Bbox
线性变换到单位边界框。- 参数:
- shorthand_namestr
表示变换“名称”的字符串。除了在DEBUG=True时提高
str(transform)
的可读性之外,此名称没有其他意义。
- is_separable = True#
如果此变换在 x 和 y 维度上可分离,则为 True。
- class matplotlib.transforms.BboxTransformTo(boxout, **kwargs)[source]#
基类:
Affine2DBase
BboxTransformTo
是一种变换,它将点从单位边界框线性变换到给定的Bbox
。创建一个新的
BboxTransformTo
,它将点从单位边界框线性变换到 boxout。- is_separable = True#
如果此变换在 x 和 y 维度上可分离,则为 True。
- class matplotlib.transforms.BboxTransformToMaxOnly(boxout, **kwargs)[source]#
-
[已弃用]
BboxTransformToMaxOnly
是一种变换,它将点从单位边界框线性变换到给定Bbox
,其左上角固定为 (0, 0)。备注
自 3.9 版本起弃用。
创建一个新的
BboxTransformTo
,它将点从单位边界框线性变换到 boxout。
- class matplotlib.transforms.BlendedAffine2D(x_transform, y_transform, **kwargs)[source]#
基类:
_BlendedMixin
,Affine2DBase
“混合”变换使用一个变换用于 x 方向,另一个变换用于 y 方向。
此版本是针对两个子变换都为
Affine2DBase
类型的情况的优化。创建一个新的“混合”变换,使用 x_transform 变换 x 轴,使用 y_transform 变换 y 轴。
x_transform 和 y_transform 都必须是 2D 仿射变换。
通常您不会直接调用此构造函数,而是使用
blended_transform_factory
函数,该函数可以自动确定要创建哪种混合变换。- is_separable = True#
如果此变换在 x 和 y 维度上可分离,则为 True。
- class matplotlib.transforms.BlendedGenericTransform(x_transform, y_transform, **kwargs)[source]#
基类:
_BlendedMixin
,Transform
“混合”变换使用一个变换用于 x 方向,另一个变换用于 y 方向。
此“通用”版本可以处理 x 和 y 方向上任何给定的子变换。
创建一个新的“混合”变换,使用 x_transform 变换 x 轴,使用 y_transform 变换 y 轴。
通常您不会直接调用此构造函数,而是使用
blended_transform_factory
函数,该函数可以自动确定要创建哪种混合变换。- contains_branch(other)[source]#
返回给定变换是否为此变换的子树。
此例程使用变换相等性来识别子树,因此在许多情况下将使用对象 ID。
对于给定变换代表此变换整体的情况,返回 True。
- property depth#
返回已链接以形成此 Transform 实例的变换数量。
注意
对于复合变换的特殊情况,返回两者中的最大深度。
- property has_inverse#
当参数为真时返回 True,否则返回 False。内置的 True 和 False 是 bool 类的仅有的两个实例。bool 类是 int 类的子类,不能被子类化。
- input_dims = 2#
此变换的输入维度数量。必须在子类中重写(使用整数)。
- inverted()[source]#
返回相应的逆变换。
它满足
x == self.inverted().transform(self.transform(x))
。此方法的返回值应被视为临时值。对 self 的更新不会导致其逆副本的相应更新。
- property is_affine#
当参数为真时返回 True,否则返回 False。内置的 True 和 False 是 bool 类的仅有的两个实例。bool 类是 int 类的子类,不能被子类化。
- is_separable = True#
如果此变换在 x 和 y 维度上可分离,则为 True。
- output_dims = 2#
此变换的输出维度数量。必须在子类中重写(使用整数)。
- pass_through = True#
如果pass_through为True,则所有祖先将始终失效,即使“自身”已经失效。
- transform_non_affine(values)[source]#
仅应用此变换的非仿射部分。
transform(values)
始终等价于transform_affine(transform_non_affine(values))
。在非仿射变换中,这通常等价于
transform(values)
。在仿射变换中,这始终是一个空操作。- 参数:
- values数组
输入值,作为长度为
input_dims
或形状为 (N,input_dims
) 的数组。
- 返回:
- 数组
输出值,作为长度为
output_dims
或形状为 (N,output_dims
) 的数组,具体取决于输入。
- class matplotlib.transforms.CompositeAffine2D(a, b, **kwargs)[source]#
基类:
Affine2DBase
通过先应用变换 a 再应用变换 b 形成的复合变换。
此版本是一个优化,用于处理 a 和 b 都是 2D 仿射变换的情况。
创建一个新的复合变换,其结果是先应用
Affine2DBase
a,然后应用Affine2DBase
b。通常你不会直接调用此构造函数,而是使用
a + b
,这会自动选择要创建的最佳复合变换实例。- property depth#
返回已链接以形成此 Transform 实例的变换数量。
注意
对于复合变换的特殊情况,返回两者中的最大深度。
- class matplotlib.transforms.CompositeGenericTransform(a, b, **kwargs)[source]#
基类:
Transform
通过先应用变换 a 再应用变换 b 形成的复合变换。
此“通用”版本可以处理任意两个变换。
创建一个新的复合变换,其结果是先应用变换 a,然后应用变换 b。
通常你不会直接调用此构造函数,而是使用
a + b
,这会自动选择要创建的最佳复合变换实例。- contains_branch_seperately(other_transform)[source]#
返回给定分支是否为该变换在每个独立维度上的子树。
此方法的一个常见用途是识别变换是否是包含 Axes 数据变换的混合变换。例如:
x_isdata, y_isdata = trans.contains_branch_seperately(ax.transData)
- property depth#
返回已链接以形成此 Transform 实例的变换数量。
注意
对于复合变换的特殊情况,返回两者中的最大深度。
- property has_inverse#
当参数为真时返回 True,否则返回 False。内置的 True 和 False 是 bool 类的仅有的两个实例。bool 类是 int 类的子类,不能被子类化。
- inverted()[source]#
返回相应的逆变换。
它满足
x == self.inverted().transform(self.transform(x))
。此方法的返回值应被视为临时值。对 self 的更新不会导致其逆副本的相应更新。
- property is_affine#
当参数为真时返回 True,否则返回 False。内置的 True 和 False 是 bool 类的仅有的两个实例。bool 类是 int 类的子类,不能被子类化。
- property is_separable#
当参数为真时返回 True,否则返回 False。内置的 True 和 False 是 bool 类的仅有的两个实例。bool 类是 int 类的子类,不能被子类化。
- pass_through = True#
如果pass_through为True,则所有祖先将始终失效,即使“自身”已经失效。
- transform_affine(values)[source]#
仅对此变换的仿射部分应用于给定值数组。
transform(values)
始终等价于transform_affine(transform_non_affine(values))
。在非仿射变换中,这通常是一个空操作。在仿射变换中,这等同于
transform(values)
。- 参数:
- values数组
输入值是长度为
input_dims
或形状为(N,input_dims
)的数组。
- 返回:
- 数组
输出值是长度为
output_dims
或形状为(N,output_dims
)的数组,具体取决于输入。
- class matplotlib.transforms.IdentityTransform(*args, **kwargs)[source]#
基类:
Affine2DBase
一个特殊类,以快速方式执行单一操作,即恒等变换。
- 参数:
- shorthand_namestr
表示变换“名称”的字符串。除了在DEBUG=True时提高
str(transform)
的可读性之外,此名称没有其他意义。
- inverted()[source]#
返回相应的逆变换。
它满足
x == self.inverted().transform(self.transform(x))
。此方法的返回值应被视为临时值。对 self 的更新不会导致其逆副本的相应更新。
- transform(values)[source]#
将此变换应用于给定的values数组。
- 参数:
- values类数组
输入值是长度为
input_dims
或形状为(N,input_dims
)的数组。
- 返回:
- 数组
输出值是长度为
output_dims
或形状为(N,output_dims
)的数组,具体取决于输入。
- transform_affine(values)[source]#
仅对此变换的仿射部分应用于给定值数组。
transform(values)
始终等价于transform_affine(transform_non_affine(values))
。在非仿射变换中,这通常是一个空操作。在仿射变换中,这等同于
transform(values)
。- 参数:
- values数组
输入值是长度为
input_dims
或形状为(N,input_dims
)的数组。
- 返回:
- 数组
输出值是长度为
output_dims
或形状为(N,output_dims
)的数组,具体取决于输入。
- transform_non_affine(values)[source]#
仅应用此变换的非仿射部分。
transform(values)
始终等价于transform_affine(transform_non_affine(values))
。在非仿射变换中,这通常等价于
transform(values)
。在仿射变换中,这始终是一个空操作。- 参数:
- values数组
输入值是长度为
input_dims
或形状为(N,input_dims
)的数组。
- 返回:
- 数组
输出值是长度为
output_dims
或形状为(N,output_dims
)的数组,具体取决于输入。
- class matplotlib.transforms.LockableBbox(bbox, x0=None, y0=None, x1=None, y1=None, **kwargs)[source]#
基类:
BboxBase
一个
Bbox
,其中某些元素可以锁定在特定值。当子边界框改变时,此边界框的边界将相应更新,但锁定的元素除外。
- 参数:
- bbox
Bbox
要封装的子边界框。
- x0浮点数或 None
x0 的锁定值,如果为 None 则不锁定。
- y0浮点数或 None
y0 的锁定值,如果为 None 则不锁定。
- x1浮点数或 None
x1 的锁定值,如果为 None 则不锁定。
- y1浮点数或 None
y1 的锁定值,如果为 None 则不锁定。
- bbox
- property locked_x0#
浮点数或 None:用于锁定 x0 的值。
- property locked_x1#
浮点数或 None:用于锁定 x1 的值。
- property locked_y0#
浮点数或 None:用于锁定 y0 的值。
- property locked_y1#
浮点数或 None:用于锁定 y1 的值。
- class matplotlib.transforms.ScaledTranslation(xt, yt, scale_trans, **kwargs)[source]#
基类:
Affine2DBase
一个变换,它在 xt 和 yt 经过 scale_trans 变换后,再对 xt 和 yt 进行平移。
- 参数:
- shorthand_namestr
表示变换“名称”的字符串。除了在DEBUG=True时提高
str(transform)
的可读性之外,此名称没有其他意义。
- class matplotlib.transforms.Transform(shorthand_name=None)[source]#
-
所有实际执行变换的
TransformNode
实例的基类。所有非仿射变换都应是此类的子类。新的仿射变换应是
Affine2D
的子类。此类的子类应至少重写以下成员:
inverted()
(如果存在逆变换)
如果默认值不适用,可以重写以下属性:
is_separable
(对于 1D -> 1D 变换默认为 True,否则为 False)has_inverse
(如果inverted()
被重写则默认为 True,否则为 False)
如果变换需要对
matplotlib.path.Path
对象执行非标准操作,例如在曾经是线段的地方添加曲线,则应重写:- 参数:
- shorthand_namestr
表示变换“名称”的字符串。除了在DEBUG=True时提高
str(transform)
的可读性之外,此名称没有其他意义。
- __add__(other)[source]#
将两个变换组合在一起,使 self 后跟 other。
A + B
返回一个变换C
,使得C.transform(x) == B.transform(A.transform(x))
。
- __sub__(other)[source]#
将 self 与 other 的逆变换组合,如果存在相同项则抵消。
# In general: A - B == A + B.inverted() # (but see note regarding frozen transforms below). # If A "ends with" B (i.e. A == A' + B for some A') we can cancel # out B: (A' + B) - B == A' # Likewise, if B "starts with" A (B = A + B'), we can cancel out A: A - (A + B') == B'.inverted() == B'^-1
抵消(而不是天真地返回
A + B.inverted()
)很重要,原因有多个:它避免了在计算 B 的逆变换时出现浮点不准确:
B - B
保证精确抵消(产生恒等变换),而B + B.inverted()
可能会有微小误差。B.inverted()
总是返回一个冻结变换:如果计算A + B + B.inverted()
并且稍后修改B
,那么B.inverted()
将不会更新,最后两项将不再抵消;另一方面,A + B - B
即使B
被修改,也总是等于A
。
- contains_branch(other)[source]#
返回给定变换是否为此变换的子树。
此例程使用变换相等性来识别子树,因此在许多情况下将使用对象 ID。
对于给定变换代表此变换整体的情况,返回 True。
- contains_branch_seperately(other_transform)[source]#
返回给定分支是否为该变换在每个独立维度上的子树。
此方法的一个常见用途是识别变换是否是包含 Axes 数据变换的混合变换。例如:
x_isdata, y_isdata = trans.contains_branch_seperately(ax.transData)
- property depth#
返回已链接以形成此 Transform 实例的变换数量。
注意
对于复合变换的特殊情况,返回两者中的最大深度。
- has_inverse = False#
如果此变换具有相应的逆变换,则为 True。
- input_dims = None#
此变换的输入维度数量。必须在子类中重写(使用整数)。
- inverted()[source]#
返回相应的逆变换。
它满足
x == self.inverted().transform(self.transform(x))
。此方法的返回值应被视为临时值。对 self 的更新不会导致其逆副本的相应更新。
- is_separable = False#
如果此变换在 x 和 y 维度上可分离,则为 True。
- output_dims = None#
此变换的输出维度数量。必须在子类中重写(使用整数)。
- transform(values)[source]#
将此变换应用于给定的values数组。
- 参数:
- values类数组
输入值,作为长度为
input_dims
或形状为 (N,input_dims
) 的数组。
- 返回:
- 数组
输出值,作为长度为
output_dims
或形状为 (N,output_dims
) 的数组,具体取决于输入。
- transform_affine(values)[source]#
仅对此变换的仿射部分应用于给定值数组。
transform(values)
始终等价于transform_affine(transform_non_affine(values))
。在非仿射变换中,这通常是一个空操作。在仿射变换中,这等同于
transform(values)
。- 参数:
- values数组
输入值,作为长度为
input_dims
或形状为 (N,input_dims
) 的数组。
- 返回:
- 数组
输出值,作为长度为
output_dims
或形状为 (N,output_dims
) 的数组,具体取决于输入。
- transform_angles(angles, pts, radians=False, pushoff=1e-05)[source]#
变换锚定在特定位置的一组角度。
- 参数:
- angles(N,) 数组类
要变换的角度。
- pts(N, 2) 数组类
角度锚定的点。
- radians布尔值,默认值:False
``angles`` 是弧度还是角度。
- pushoff浮点数
对于 ``pts`` 中的每个点和 ``angles`` 中的每个角度,通过变换从该点开始且与水平轴成该角度的长度为 ``pushoff`` 的线段,然后测量水平轴与变换后线段之间的角度来计算变换后的角度。
- 返回:
- (N,) 数组
- transform_bbox(bbox)[source]#
变换给定的边界框。
对于包括缓存(Matplotlib 中的常见需求)在内的更智能的变换,请参阅
TransformedBbox
。
- transform_non_affine(values)[source]#
仅应用此变换的非仿射部分。
transform(values)
始终等价于transform_affine(transform_non_affine(values))
。在非仿射变换中,这通常等价于
transform(values)
。在仿射变换中,这始终是一个空操作。- 参数:
- values数组
输入值,作为长度为
input_dims
或形状为 (N,input_dims
) 的数组。
- 返回:
- 数组
输出值,作为长度为
output_dims
或形状为 (N,output_dims
) 的数组,具体取决于输入。
- transform_path_affine(path)[source]#
将此变换的仿射部分应用于
Path
path,并返回一个新的Path
。transform_path(path)
等同于transform_path_affine(transform_path_non_affine(values))
。
- transform_path_non_affine(path)[source]#
将此变换的非仿射部分应用于
Path
path,并返回一个新的Path
。transform_path(path)
等同于transform_path_affine(transform_path_non_affine(values))
。
- transform_point(point)[source]#
返回一个变换后的点。
此函数仅为向后兼容性保留;更通用的
transform
方法能够变换点列表和单个点。点以长度为
input_dims
的序列给出。变换后的点以长度为output_dims
的序列返回。
- class matplotlib.transforms.TransformNode(shorthand_name=None)[source]#
基类:
object
参与变换树并需要使其父级失效或自身失效的任何对象的基类。这包括并非真正变换的类,例如边界框,因为某些变换依赖于边界框来计算其值。
- 参数:
- shorthand_namestr
表示变换“名称”的字符串。除了在DEBUG=True时提高
str(transform)
的可读性之外,此名称没有其他意义。
- invalidate()[source]#
使此
TransformNode
失效并触发其祖先的失效。应在变换改变时调用。
- is_affine = False#
- is_bbox = False#
- pass_through = False#
如果pass_through为True,则所有祖先将始终失效,即使“自身”已经失效。
- class matplotlib.transforms.TransformWrapper(child)[source]#
基类:
Transform
一个辅助类,它持有一个子变换并与其等效。
如果变换树中的节点在运行时必须替换为不同类型的变换,这会很有用。此类允许该替换正确触发失效。
TransformWrapper
实例在其整个生命周期中必须具有相同的输入和输出维度,因此子变换只能替换为具有相同维度的另一个子变换。child: 一个
Transform
实例。此子项以后可以用set()
替换。- property has_inverse#
当参数为真时返回 True,否则返回 False。内置的 True 和 False 是 bool 类的仅有的两个实例。bool 类是 int 类的子类,不能被子类化。
- property input_dims#
None 单例的类型。
- property is_affine#
当参数为真时返回 True,否则返回 False。内置的 True 和 False 是 bool 类的仅有的两个实例。bool 类是 int 类的子类,不能被子类化。
- property is_separable#
当参数为真时返回 True,否则返回 False。内置的 True 和 False 是 bool 类的仅有的两个实例。bool 类是 int 类的子类,不能被子类化。
- property output_dims#
None 单例的类型。
- pass_through = True#
如果pass_through为True,则所有祖先将始终失效,即使“自身”已经失效。
- class matplotlib.transforms.TransformedBbox(bbox, transform, **kwargs)[source]#
基类:
BboxBase
一个
Bbox
,由给定变换自动变换。当子边界框或变换改变时,此边界框的边界将相应更新。
- class matplotlib.transforms.TransformedPatchPath(patch)[source]#
-
TransformedPatchPath
缓存Patch
的一个非仿射变换副本。当变换的非仿射部分或Patch
改变时,此缓存副本会自动更新。- 参数:
- patch
Patch
- patch
- class matplotlib.transforms.TransformedPath(path, transform)[source]#
-
TransformedPath
缓存Path
的一个非仿射变换副本。当变换的非仿射部分改变时,此缓存副本会自动更新。注意
路径被此类视为不可变。对路径顶点/代码的任何更新都不会触发变换重新计算。
- get_transformed_points_and_affine(path)[source]#
返回子路径的副本,其中变换的非仿射部分已应用,并附带完成变换所需的路径仿射部分。与
get_transformed_path_and_affine()
不同,不会执行插值。
- matplotlib.transforms.blended_transform_factory(x_transform, y_transform)[source]#
创建一个新的“混合”变换,使用 x_transform 变换 x 轴,使用 y_transform 变换 y 轴。
当两个子变换都是仿射变换时,将返回混合变换的更快版本。
- matplotlib.transforms.composite_transform_factory(a, b)[source]#
创建一个新的复合变换,其结果是先应用变换 a,然后应用变换 b。
当两个子变换都是仿射变换,或其中一个或另一个是恒等变换时,提供了混合变换的快捷版本。
复合变换也可以使用“+”运算符创建,例如:
c = a + b
- matplotlib.transforms.interval_contains(interval, val)[source]#
检查区间是否(包含端点)包含给定值。
- 参数:
- interval(浮点数, 浮点数)
区间的端点。
- val浮点数
要检查的值是否在区间内。
- 返回:
- 布尔值
``val`` 是否在 ``interval`` 内。
- matplotlib.transforms.interval_contains_open(interval, val)[source]#
检查区间是否(不含端点)包含给定值。
- 参数:
- interval(浮点数, 浮点数)
区间的端点。
- val浮点数
要检查的值是否在区间内。
- 返回:
- 布尔值
``val`` 是否在 ``interval`` 内。
- matplotlib.transforms.nonsingular(vmin, vmax, expander=0.001, tiny=1e-15, increasing=True)[source]#
根据需要修改范围的端点以避免奇异性。
- 参数:
- vmin, vmax浮点数
初始端点。
- expander浮点数,默认值:0.001
如果原始区间太小,根据 ``tiny`` 扩展 ``vmin`` 和 ``vmax`` 的分数。
- tiny浮点数,默认值:1e-15
区间与其端点最大绝对值之比的阈值。如果区间小于此值,它将被扩展。此值应约为 1e-15 或更大;否则区间将接近双精度分辨率限制。
- increasing布尔值,默认值:True
如果为 True,则在 ``vmin`` > ``vmax`` 时交换 ``vmin``, ``vmax``。
- 返回:
- vmin, vmax浮点数
端点,必要时已扩展和/或交换。如果任一输入为无穷大或 NaN,或者两个输入都为 0 或非常接近 0,则返回 -``expander``, ``expander``。