matplotlib.transforms#

Inheritance diagram of matplotlib.transforms

Matplotlib 包含一个用于任意几何变换的框架,该框架用于确定画布上所有绘制元素的最终位置。

变换被组合成TransformNode对象的树形结构,其实际值取决于它们的子节点。当子节点内容改变时,它们的父节点会自动失效。下次访问失效的变换时,它会被重新计算以反映这些改变。这种失效/缓存方法防止了不必要的变换重新计算,有助于提升交互性能。

例如,这是用于在图中绘制数据的变换树图:

Diagram of transform tree from data to figure coordinates.

该框架可用于仿射变换和非仿射变换。然而,为了提高速度,我们希望尽可能使用后端渲染器来执行仿射变换。因此,可以在一组数据上仅执行变换的仿射或非仿射部分。仿射变换总是假定在非仿射变换之后发生。对于任何变换,

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,则使用单位变换进行初始化。

clear()[source]#

将底层矩阵重置为单位变换。

static from_values(a, b, c, d, e, f)[source]#

从给定值创建新的Affine2D实例

a c e
b d f
0 0 1

.

get_matrix()[source]#

获取底层的3x3变换矩阵

a c e
b d f
0 0 1

.

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,则在xy方向上应用相同的缩放比例。

返回self,因此此方法可以轻松地与对rotate()rotate_deg()translate()scale()的更多调用进行链式操作。

set(other)[source]#

从另一个Affine2DBase对象的冻结副本设置此变换。

set_matrix(mtx)[source]#

从3x3数组设置底层变换矩阵

a c e
b d f
0 0 1

.

skew(xShear, yShear)[source]#

原地添加一个倾斜。

xShearyShear分别是沿x轴和y轴的剪切角,单位为弧度。

返回self,因此此方法可以轻松地与对rotate()rotate_deg()translate()scale()的更多调用进行链式操作。

skew_deg(xShear, yShear)[source]#

原地添加一个倾斜。

xShearyShear分别是沿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)的可读性之外,此名称没有其他意义。

frozen()[source]#

返回此变换节点的冻结副本。当其子节点更改时,此冻结副本不会更新。这对于存储变换的已知先前状态很有用,而通常会使用copy.deepcopy()

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#

此变换的输出维度数量。必须在子类中重写(使用整数)。

to_values()[source]#

将矩阵的值作为(a, b, c, d, e, f)元组返回。

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)的可读性之外,此名称没有其他意义。

get_affine()[source]#

获取此变换的仿射部分。

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)的数组,具体取决于输入。

transform_path(path)[source]#

将此变换应用于Path path,并返回一个新的Path

在某些情况下,此变换可能会在路径中插入最初是线段的曲线。

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))

class matplotlib.transforms.AffineDeltaTransform(transform, **kwargs)[source]#

基类:Affine2DBase

一个用于转换点对之间位移的变换包装器。

此类旨在用于转换点对之间的位移(“位置增量”)(例如,作为Collectionoffset_transform):给定变换t,使得t = AffineDeltaTransform(t) + offsetAffineDeltaTransform满足AffineDeltaTransform(a - b) == AffineDeltaTransform(a) - AffineDeltaTransform(b)

这是通过将变换矩阵的偏移分量强制设为零来实现的。

自3.3版本起,此类为实验性,其API可能会发生变化。

参数:
shorthand_namestr

表示变换“名称”的字符串。除了在DEBUG=True时提高str(transform)的可读性之外,此名称没有其他意义。

get_matrix()[source]#

获取此变换仿射部分的矩阵。

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]])
参数:
pointsndarray

一个(2, 2)形式的数组,如[[x0, y0], [x1, y1]]

property bounds#

返回 (x0, y0, width, height)。

static from_bounds(x0, y0, width, height)[source]#

根据 x0y0widthheight 创建一个新的 Bbox

widthheight 可以是负数。

static from_extents(*args, minpos=None)[source]#

根据 leftbottomrighttop 创建一个新的 Bbox。

y 轴向上增加。

参数:
left, bottom, right, topfloat

边界框的四个边界。

minposfloat 或 None

如果提供了此参数,Bbox 将设置一个最小正值。这在处理对数刻度以及负边界导致浮点误差的其他刻度时非常有用。

frozen()[source]#

参与变换树并需要使其父级失效或自身失效的任何对象的基类。这包括并非真正变换的类,例如边界框,因为某些变换依赖于边界框来计算其值。

get_points()[source]#

[[x0, y0], [x1, y1]] 形式的数组返回边界框的点。

ignore(value)[source]#

设置后续调用 update_from_data_xy() 时是否忽略现有边界框的边界。

valuebool
property intervalx#

定义边界框的一对 x 坐标。

这不保证从左到右排序。

property intervaly#

定义边界框的一对 y 坐标。

这不保证从下到上排序。

property minpos#

Bbox 中两个方向上的最小正值。

这在处理对数刻度以及负边界导致浮点误差的其他刻度时非常有用,并且将用作最小范围而不是 p0

property minposx#

Bbox 中 x 方向上的最小正值。

这在处理对数刻度以及负边界导致浮点误差的其他刻度时非常有用,并且将用作最小 x 范围而不是 x0

property minposy#

Bbox 中 y 方向上的最小正值。

这在处理对数刻度以及负边界导致浮点误差的其他刻度时非常有用,并且将用作最小 y 范围而不是 y0

mutated()[source]#

返回自初始化以来 bbox 是否已更改。

mutatedx()[source]#

返回自初始化以来 x 限制是否已更改。

mutatedy()[source]#

返回自初始化以来 y 限制是否已更改。

static null()[source]#

创建从 (inf, inf) 到 (-inf, -inf) 的新的空 Bbox

property p0#

定义边界框的第一对 (x, y) 坐标。

这不保证是左下角(为此,请使用 min)。

property p1#

定义边界框的第二对 (x, y) 坐标。

这不保证是右上角(为此,请使用 max)。

set(other)[source]#

从另一个 Bbox 的“冻结”边界设置此边界框。

set_points(points)[source]#

直接从 [[x0, y0], [x1, y1]] 形式的数组设置边界框的点。不执行错误检查,因为此方法主要用于内部使用。

static unit()[source]#

创建一个从 (0, 0) 到 (1, 1) 的新单位 Bbox

update_from_data_x(x, ignore=None)[source]#

根据传入的数据更新 Bbox 的 x 边界。更新后,边界将具有正 width,且 x0 将是最小值。

参数:
xndarray

x 值数组。

ignorebool, 可选
  • 当为 True 时,忽略 Bbox 的现有边界。

  • 当为 False 时,包含 Bbox 的现有边界。

  • 当为 None 时,使用传递给 ignore() 的最后一个值。

update_from_data_xy(xy, ignore=None, updatex=True, updatey=True)[source]#

根据传入的 xy 坐标更新 Bbox 边界。

更新后,边界将具有正 widthheightx0y0 将是最小值。

参数:
xy(N, 2) 类数组

(x, y) 坐标。

ignorebool, 可选
  • 当为 True 时,忽略 Bbox 的现有边界。

  • 当为 False 时,包含 Bbox 的现有边界。

  • 当为 None 时,使用传递给 ignore() 的最后一个值。

updatex, updateybool, 默认: True

当为 True 时,更新 x/y 值。

update_from_data_y(y, ignore=None)[source]#

根据传入的数据更新 Bbox 的 y 边界。更新后,边界将具有正 height,且 y0 将是最小值。

参数:
yndarray

y 值数组。

ignorebool, 可选
  • 当为 True 时,忽略 Bbox 的现有边界。

  • 当为 False 时,包含 Bbox 的现有边界。

  • 当为 None 时,使用传递给 ignore() 的最后一个值。

update_from_path(path, ignore=None, updatex=True, updatey=True)[source]#

更新 Bbox 的边界以包含所提供路径的顶点。更新后,边界将具有正 widthheightx0y0 将是最小值。

参数:
pathPath
ignorebool, 可选
  • 当为 True 时,忽略 Bbox 的现有边界。

  • 当为 False 时,包含 Bbox 的现有边界。

  • 当为 None 时,使用传递给 ignore() 的最后一个值。

updatex, updateybool, 默认: True

当为 True 时,更新 x/y 值。

property x0#

定义边界框的一对 x 坐标中的第一个。

这不保证小于 x1(为此,请使用 xmin)。

property x1#

定义边界框的一对 x 坐标中的第二个。

这不保证大于 x0(为此,请使用 xmax)。

property y0#

定义边界框的一对 y 坐标中的第一个。

这不保证小于 y1(为此,请使用 ymin)。

property y1#

定义边界框的一对 y 坐标中的第二个。

这不保证大于 y0(为此,请使用 ymax)。

class matplotlib.transforms.BboxBase(shorthand_name=None)[source]#

基类:TransformNode

所有边界框的基类。

此类是不可变的;Bbox 是一个可变的子类。

规范表示为两个点,对其顺序没有限制。提供了方便的属性来获取左、下、右、上边缘以及宽度和高度,但这些不被显式存储。

参数:
shorthand_namestr

表示变换“名称”的字符串。除了在DEBUG=True时提高str(transform)的可读性之外,此名称没有其他意义。

anchored(c, container)[source]#

返回锚定在 containerc 处的 Bbox 的副本。

参数:
c(float, float) 或 {'C', 'SW', 'S', 'SE', 'E', 'NE', ...}

相对坐标的 (x, y) 对(0 为左或下,1 为右或上),'C'(中心),或一个基本方向('SW',西南,为左下角,等等)。

containerBbox

Bbox 位于其内的框。

另请参阅

Axes.set_anchor
property bounds#

返回 (x0, y0, width, height)。

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)}#
contains(x, y)[source]#

返回 (x, y) 是否在边界框内或其边缘上。

containsx(x)[source]#

返回 x 是否在闭区间 (x0, x1) 中。

containsy(y)[source]#

返回 y 是否在闭区间 (y0, y1) 中。

corners()[source]#

返回此矩形的角点作为点数组。

具体来说,这会返回数组 [[x0, y0], [x0, y1], [x1, y0], [x1, y1]]

count_contains(vertices)[source]#

计算 Bbox 中包含的顶点数量。任何 x 或 y 值非有限的顶点都将被忽略。

参数:
vertices(N, 2) 数组
count_overlaps(bboxes)[source]#

计算与此边界框重叠的边界框数量。

参数:
bboxesBboxBase 序列
expanded(sw, sh)[source]#

通过围绕其中心以因子 swsh 展开此边界框来构造一个 Bbox

property extents#

返回 (x0, y0, x1, y1)。

frozen()[source]#

参与变换树并需要使其父级失效或自身失效的任何对象的基类。这包括并非真正变换的类,例如边界框,因为某些变换依赖于边界框来计算其值。

fully_contains(x, y)[source]#

返回 x, y 是否在边界框内,但不包含其边缘。

fully_containsx(x)[source]#

返回 x 是否在开区间 (x0, x1) 中。

fully_containsy(y)[source]#

返回 y 是否在开区间 (y0, y1) 中。

fully_overlaps(other)[source]#

返回此边界框是否与另一个边界框重叠,不包括边缘。

参数:
otherBboxBase
get_points()[source]#
property height#

边界框的(有符号)高度。

static intersection(bbox1, bbox2)[source]#

如果 bbox1bbox2 相交,则返回它们的交集,否则返回 None。

property intervalx#

定义边界框的一对 x 坐标。

这不保证从左到右排序。

property intervaly#

定义边界框的一对 y 坐标。

这不保证从下到上排序。

is_affine = True#
is_bbox = True#
property max#

边界框的右上角。

property min#

边界框的左下角。

overlaps(other)[source]#

返回此边界框是否与另一个边界框重叠。

参数:
otherBboxBase
property p0#

定义边界框的第一对 (x, y) 坐标。

这不保证是左下角(为此,请使用 min)。

property p1#

定义边界框的第二对 (x, y) 坐标。

这不保证是右上角(为此,请使用 max)。

padded(w_pad, h_pad=None)[source]#

通过在所有四边填充来构造一个 Bbox

参数:
w_padfloat

宽度填充

h_padfloat, 可选

高度填充。默认为 w_pad

rotated(radians)[source]#

返回在将此 Bbox 旋转 radians 角度后,包含结果的轴对齐边界框。

shrunk(mx, my)[source]#

返回 Bbox 的副本,在 x 方向上按因子 mx 缩小,在 y 方向上按因子 my 缩小。框的左下角保持不变。通常 mxmy 将小于 1,但这不是强制性的。

shrunk_to_aspect(box_aspect, container=None, fig_aspect=1.0)[source]#

返回 Bbox 的副本,其大小被缩小,使其在具有所需纵横比 box_aspect 的同时尽可能大。如果框坐标是相对的(即,像图形这样的大框的分数),则使用 fig_aspect 指定该图形的物理纵横比,以便 box_aspect 也可以以绝对维度而非相对维度的比率给出。

property size#

边界框的(有符号)宽度和高度。

splitx(*args)[source]#

返回通过在 args 给定的小数位置用垂直线分割原始 Bbox 形成的新 Bbox 对象列表。

splity(*args)[source]#

返回通过在 args 给定的小数位置用水平线分割原始 Bbox 形成的新 Bbox 对象列表。

transformed(transform)[source]#

通过 transform 静态变换此边界框来构造一个 Bbox

translated(tx, ty)[source]#

通过将此边界框平移 txty 来构造一个 Bbox

static union(bboxes)[source]#

返回包含所有给定 bboxesBbox

property width#

边界框的(有符号)宽度。

property x0#

定义边界框的一对 x 坐标中的第一个。

这不保证小于 x1(为此,请使用 xmin)。

property x1#

定义边界框的一对 x 坐标中的第二个。

这不保证大于 x0(为此,请使用 xmax)。

property xmax#

边界框的右边缘。

property xmin#

边界框的左边缘。

property y0#

定义边界框的一对 y 坐标中的第一个。

这不保证小于 y1(为此,请使用 ymin)。

property y1#

定义边界框的一对 y 坐标中的第二个。

这不保证大于 y0(为此,请使用 ymax)。

property ymax#

边界框的顶边缘。

property ymin#

边界框的底边缘。

class matplotlib.transforms.BboxTransform(boxin, boxout, **kwargs)[source]#

基类:Affine2DBase

BboxTransform 将点从一个 Bbox 线性变换到另一个。

创建一个新的 BboxTransform,它将点从 boxin 线性变换到 boxout

get_matrix()[source]#

获取此变换仿射部分的矩阵。

is_separable = True#

如果此变换在 x 和 y 维度上可分离,则为 True。

class matplotlib.transforms.BboxTransformFrom(boxin, **kwargs)[source]#

基类:Affine2DBase

BboxTransformFrom 将点从给定的 Bbox 线性变换到单位边界框。

参数:
shorthand_namestr

表示变换“名称”的字符串。除了在DEBUG=True时提高str(transform)的可读性之外,此名称没有其他意义。

get_matrix()[source]#

获取此变换仿射部分的矩阵。

is_separable = True#

如果此变换在 x 和 y 维度上可分离,则为 True。

class matplotlib.transforms.BboxTransformTo(boxout, **kwargs)[source]#

基类:Affine2DBase

BboxTransformTo 是一种变换,它将点从单位边界框线性变换到给定的 Bbox

创建一个新的 BboxTransformTo,它将点从单位边界框线性变换到 boxout

get_matrix()[source]#

获取此变换仿射部分的矩阵。

is_separable = True#

如果此变换在 x 和 y 维度上可分离,则为 True。

class matplotlib.transforms.BboxTransformToMaxOnly(boxout, **kwargs)[source]#

基类:BboxTransformTo

[已弃用] BboxTransformToMaxOnly 是一种变换,它将点从单位边界框线性变换到给定 Bbox,其左上角固定为 (0, 0)。

备注

自 3.9 版本起弃用。

创建一个新的 BboxTransformTo,它将点从单位边界框线性变换到 boxout

get_matrix()[source]#

获取此变换仿射部分的矩阵。

class matplotlib.transforms.BlendedAffine2D(x_transform, y_transform, **kwargs)[source]#

基类:_BlendedMixin, Affine2DBase

“混合”变换使用一个变换用于 x 方向,另一个变换用于 y 方向。

此版本是针对两个子变换都为 Affine2DBase 类型的情况的优化。

创建一个新的“混合”变换,使用 x_transform 变换 x 轴,使用 y_transform 变换 y 轴。

x_transformy_transform 都必须是 2D 仿射变换。

通常您不会直接调用此构造函数,而是使用 blended_transform_factory 函数,该函数可以自动确定要创建哪种混合变换。

get_matrix()[source]#

获取此变换仿射部分的矩阵。

is_separable = True#

如果此变换在 x 和 y 维度上可分离,则为 True。

class matplotlib.transforms.BlendedGenericTransform(x_transform, y_transform, **kwargs)[source]#

基类:_BlendedMixin, Transform

“混合”变换使用一个变换用于 x 方向,另一个变换用于 y 方向。

此“通用”版本可以处理 xy 方向上任何给定的子变换。

创建一个新的“混合”变换,使用 x_transform 变换 x 轴,使用 y_transform 变换 y 轴。

通常您不会直接调用此构造函数,而是使用 blended_transform_factory 函数,该函数可以自动确定要创建哪种混合变换。

contains_branch(other)[source]#

返回给定变换是否为此变换的子树。

此例程使用变换相等性来识别子树,因此在许多情况下将使用对象 ID。

对于给定变换代表此变换整体的情况,返回 True。

property depth#

返回已链接以形成此 Transform 实例的变换数量。

注意

对于复合变换的特殊情况,返回两者中的最大深度。

frozen()[source]#

返回此变换节点的冻结副本。当其子节点更改时,此冻结副本不会更新。这对于存储变换的已知先前状态很有用,而通常会使用copy.deepcopy()

get_affine()[source]#

获取此变换的仿射部分。

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 形成的复合变换。

此版本是一个优化,用于处理 ab 都是 2D 仿射变换的情况。

创建一个新的复合变换,其结果是先应用 Affine2DBase a,然后应用 Affine2DBase b

通常你不会直接调用此构造函数,而是使用 a + b,这会自动选择要创建的最佳复合变换实例。

property depth#

返回已链接以形成此 Transform 实例的变换数量。

注意

对于复合变换的特殊情况,返回两者中的最大深度。

get_matrix()[source]#

获取此变换仿射部分的矩阵。

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 实例的变换数量。

注意

对于复合变换的特殊情况,返回两者中的最大深度。

frozen()[source]#

返回此变换节点的冻结副本。当其子节点更改时,此冻结副本不会更新。这对于存储变换的已知先前状态很有用,而通常会使用copy.deepcopy()

get_affine()[source]#

获取此变换的仿射部分。

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)的数组,具体取决于输入。

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_non_affine(path)[source]#

将此变换的非仿射部分应用于Path path,并返回一个新的Path

transform_path(path)等同于transform_path_affine(transform_path_non_affine(values))

class matplotlib.transforms.IdentityTransform(*args, **kwargs)[source]#

基类:Affine2DBase

一个特殊类,以快速方式执行单一操作,即恒等变换。

参数:
shorthand_namestr

表示变换“名称”的字符串。除了在DEBUG=True时提高str(transform)的可读性之外,此名称没有其他意义。

frozen()[source]#

返回此变换节点的冻结副本。当其子节点更改时,此冻结副本不会更新。这对于存储变换的已知先前状态很有用,而通常会使用copy.deepcopy()

get_affine()[source]#

获取此变换的仿射部分。

get_matrix()[source]#

获取此变换仿射部分的矩阵。

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)的数组,具体取决于输入。

transform_path(path)[source]#

将此变换应用于Path path,并返回一个新的Path

在某些情况下,此变换可能会在路径中插入最初是线段的曲线。

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))

class matplotlib.transforms.LockableBbox(bbox, x0=None, y0=None, x1=None, y1=None, **kwargs)[source]#

基类:BboxBase

一个 Bbox,其中某些元素可以锁定在特定值。

当子边界框改变时,此边界框的边界将相应更新,但锁定的元素除外。

参数:
bboxBbox

要封装的子边界框。

x0浮点数或 None

x0 的锁定值,如果为 None 则不锁定。

y0浮点数或 None

y0 的锁定值,如果为 None 则不锁定。

x1浮点数或 None

x1 的锁定值,如果为 None 则不锁定。

y1浮点数或 None

y1 的锁定值,如果为 None 则不锁定。

get_points()[source]#
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

一个变换,它在 xtyt 经过 scale_trans 变换后,再对 xtyt 进行平移。

参数:
shorthand_namestr

表示变换“名称”的字符串。除了在DEBUG=True时提高str(transform)的可读性之外,此名称没有其他意义。

get_matrix()[source]#

获取此变换仿射部分的矩阵。

class matplotlib.transforms.Transform(shorthand_name=None)[source]#

基类:TransformNode

所有实际执行变换的 TransformNode 实例的基类。

所有非仿射变换都应是此类的子类。新的仿射变换应是 Affine2D 的子类。

此类的子类应至少重写以下成员:

如果默认值不适用,可以重写以下属性:

如果变换需要对 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]#

selfother 的逆变换组合,如果存在相同项则抵消。

# 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 实例的变换数量。

注意

对于复合变换的特殊情况,返回两者中的最大深度。

get_affine()[source]#

获取此变换的仿射部分。

get_matrix()[source]#

获取此变换仿射部分的矩阵。

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(path)[source]#

将此变换应用于Path path,并返回一个新的Path

在某些情况下,此变换可能会在路径中插入最初是线段的曲线。

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)的可读性之外,此名称没有其他意义。

frozen()[source]#

返回此变换节点的冻结副本。当其子节点更改时,此冻结副本不会更新。这对于存储变换的已知先前状态很有用,而通常会使用copy.deepcopy()

invalidate()[source]#

使此 TransformNode 失效并触发其祖先的失效。应在变换改变时调用。

is_affine = False#
is_bbox = False#
pass_through = False#

如果pass_through为True,则所有祖先将始终失效,即使“自身”已经失效。

set_children(*children)[source]#

设置变换的子项,以便失效系统知道哪些变换可以使此变换失效。应从依赖其他变换的任何变换的构造函数中调用。

class matplotlib.transforms.TransformWrapper(child)[source]#

基类:Transform

一个辅助类,它持有一个子变换并与其等效。

如果变换树中的节点在运行时必须替换为不同类型的变换,这会很有用。此类允许该替换正确触发失效。

TransformWrapper 实例在其整个生命周期中必须具有相同的输入和输出维度,因此子变换只能替换为具有相同维度的另一个子变换。

child: 一个 Transform 实例。此子项以后可以用 set() 替换。

frozen()[source]#

返回此变换节点的冻结副本。当其子节点更改时,此冻结副本不会更新。这对于存储变换的已知先前状态很有用,而通常会使用copy.deepcopy()

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,则所有祖先将始终失效,即使“自身”已经失效。

set(child)[source]#

用另一个替换此变换的当前子项。

新子项必须具有与当前子项相同的输入和输出维度数量。

class matplotlib.transforms.TransformedBbox(bbox, transform, **kwargs)[source]#

基类:BboxBase

一个 Bbox,由给定变换自动变换。当子边界框或变换改变时,此边界框的边界将相应更新。

参数:
bboxBbox
transformTransform
contains(x, y)[source]#

返回 (x, y) 是否在边界框内或其边缘上。

fully_contains(x, y)[source]#

返回 x, y 是否在边界框内,但不包含其边缘。

get_points()[source]#
class matplotlib.transforms.TransformedPatchPath(patch)[source]#

基类:TransformedPath

TransformedPatchPath 缓存 Patch 的一个非仿射变换副本。当变换的非仿射部分或 Patch 改变时,此缓存副本会自动更新。

参数:
patchPatch
class matplotlib.transforms.TransformedPath(path, transform)[source]#

基类:TransformNode

TransformedPath 缓存 Path 的一个非仿射变换副本。当变换的非仿射部分改变时,此缓存副本会自动更新。

注意

路径被此类视为不可变。对路径顶点/代码的任何更新都不会触发变换重新计算。

参数:
pathPath
transformTransform
get_affine()[source]#
get_fully_transformed_path()[source]#

返回子路径的完全变换副本。

get_transformed_path_and_affine()[source]#

返回子路径的副本,其中变换的非仿射部分已应用,并附带完成变换所需的路径仿射部分。

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``。

matplotlib.transforms.offset_copy(trans, fig=None, x=0.0, y=0.0, units='inches')[source]#

返回一个添加了偏移量的新变换。

参数:
transTransform 子类

任何将应用偏移量的变换。

figFigure,默认值:None

当前图。如果 ``units`` 是 'dots',则可以为 None。

x, y浮点数,默认值:0.0

要应用的偏移量。

units{'inches', 'points', 'dots'},默认值:'inches'

偏移量的单位。

返回:
Transform 子类

已应用偏移量的变换。