matplotlib.tri#

非结构化三角网格函数。

class matplotlib.tri.Triangulation(x, y, triangles=None, mask=None)[source]#

由npoints个点和ntri个三角形组成的非结构化三角网格。三角形可以由用户指定,也可以使用Delaunay三角剖分自动生成。

参数:
x, y(npoints,) 类数组对象

网格点的坐标。

triangles(ntri, 3) int类型类数组对象, 可选

对于每个三角形,组成该三角形的三个点的索引,按逆时针顺序排列。如果未指定,则计算Delaunay三角剖分。

mask(ntri,) bool类型类数组对象, 可选

哪些三角形被遮罩掉。

属性:
triangles(ntri, 3) int类型数组

对于每个三角形,组成该三角形的三个点的索引,按逆时针顺序排列。如果要考虑mask,请改用get_masked_triangles

mask(ntri, 3) bool类型数组或None

被遮罩掉的三角形。

is_delaunay布尔值

Triangulation是否为计算得出的Delaunay三角剖分(其中未指定triangles)或不是。

备注

为了使Triangulation有效,它不能有重复的点、由共线点形成的三角形或重叠的三角形。

calculate_plane_coefficients(z)[source]#

根据点 (x, y) 坐标和指定形状为 (npoints) 的 z 数组,计算所有未遮罩三角形的平面方程系数。返回的数组形状为 (npoints, 3),允许使用 z = array[tri, 0] * x  + array[tri, 1] * y + array[tri, 2] 来计算三角形 tri 中 (x, y) 位置的 z 值。

property edges#

返回形状为 (nedges, 2) 的整数数组,其中包含所有未遮罩三角形的边。

每行通过其起点索引和终点索引定义一条边。每条边只出现一次,即对于点 ij 之间的边,只会出现 (i, j)(j, i)

get_cpp_triangulation()[source]#

返回底层的C++ Triangulation 对象,如果需要则创建它。

static get_from_args_and_kwargs(*args, **kwargs)[source]#

从 args 和 kwargs 返回一个 Triangulation 对象,以及移除了已消耗值的剩余 args 和 kwargs。

有两种替代方案:第一种是第一个参数是 Triangulation 对象,在这种情况下它被返回;第二种是 args 和 kwargs 足以创建一个新的 Triangulation 来返回。在后一种情况下,有关可能的 args 和 kwargs,请参阅 Triangulation.__init__ 的文档。

get_masked_triangles()[source]#

返回一个考虑了遮罩的三角形数组。

get_trifinder()[source]#

返回此三角剖分的默认 matplotlib.tri.TriFinder 对象,如果需要则创建它。这允许轻松共享同一个 TriFinder 对象。

property neighbors#

返回形状为 (ntri, 3) 的整数数组,其中包含相邻三角形。

对于每个三角形,其共享相同边的三个相邻三角形的索引,如果没有此类相邻三角形则为-1。neighbors[i, j] 是从点索引 triangles[i, j] 到点索引 triangles[i, (j+1)%3] 的边对应的相邻三角形。

set_mask(mask)[source]#

设置或清除遮罩数组。

参数:
maskNone或长度为ntri的布尔数组
class matplotlib.tri.TriContourSet(ax, *args, **kwargs)[source]#

基类:ContourSet

为三角网格创建并存储一组等高线或填充区域。

该类通常不由用户直接实例化,而是由tricontourtricontourf实例化。

属性:
levels数组

等高线级别的值。

layers数组

与线等高线的级别相同;对于填充等高线,位于级别之间的一半位置。请参见ContourSet._process_colors

绘制三角网格等高线或填充区域,取决于关键字参数 filled 是 False(默认)还是 True。

初始化器的第一个参数必须是 Axes 对象。其余参数和关键字参数在 tricontour 的文档字符串中描述。

set(*, agg_filter=<UNSET>, alpha=<UNSET>, animated=<UNSET>, antialiased=<UNSET>, array=<UNSET>, capstyle=<UNSET>, clim=<UNSET>, clip_box=<UNSET>, clip_on=<UNSET>, clip_path=<UNSET>, cmap=<UNSET>, color=<UNSET>, edgecolor=<UNSET>, facecolor=<UNSET>, gid=<UNSET>, hatch=<UNSET>, hatch_linewidth=<UNSET>, in_layout=<UNSET>, joinstyle=<UNSET>, label=<UNSET>, linestyle=<UNSET>, linewidth=<UNSET>, mouseover=<UNSET>, norm=<UNSET>, offset_transform=<UNSET>, offsets=<UNSET>, path_effects=<UNSET>, paths=<UNSET>, picker=<UNSET>, pickradius=<UNSET>, rasterized=<UNSET>, sketch_params=<UNSET>, snap=<UNSET>, transform=<UNSET>, url=<UNSET>, urls=<UNSET>, visible=<UNSET>, zorder=<UNSET>)[source]#

一次性设置多个属性。

支持的属性包括:

属性

描述

agg_filter

一个过滤函数,它接受一个 (m, n, 3) 浮点数组和一个 dpi 值,并返回一个 (m, n, 3) 数组以及图像左下角的两个偏移量

alpha

类数组或浮点数或 None

animated

布尔值

antialiasedaaantialiaseds

布尔值或布尔值列表

array

类数组或 None

capstyle

CapStyle 或 {'butt', 'projecting', 'round'}

clim

(vmin: 浮点数, vmax: 浮点数)

clip_box

BboxBase 或 None

clip_on

布尔值

clip_path

Patch 或 (Path, Transform) 或 None

cmap

Colormap 或 str 或 None

color

颜色 或 RGBA 元组列表

edgecolorecedgecolors

颜色颜色列表 或 'face'

facecolorfacecolorsfc

颜色颜色列表

figure

FigureSubFigure

gid

str

hatch

{'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'}

hatch_linewidth

未知

in_layout

布尔值

joinstyle

JoinStyle 或 {'miter', 'round', 'bevel'}

label

对象

linestyledasheslinestylesls

字符串或元组或其列表

linewidthlinewidthslw

浮点数或浮点数列表

mouseover

布尔值

norm

Normalize 或 str 或 None

offset_transformtransOffset

变换

offsets

(N, 2) 或 (2,) 类数组

path_effects

AbstractPathEffect 列表

paths

未知

picker

None 或 布尔值 或 浮点数 或 可调用对象

pickradius

浮点数

rasterized

布尔值

sketch_params

(scale: 浮点数, length: 浮点数, randomness: 浮点数)

snap

布尔值或 None

transform

变换

url

str

字符串列表或 None

urls

visible

布尔值

zorder

浮点数

class matplotlib.tri.TriFinder(triangulation)[source]#

用于查找 Triangulation 中 (x, y) 点所在三角形的抽象基类。

通常最好使用函数 Triangulation.get_trifinder,而不是实例化一个从 TriFinder 派生的类的对象。

派生类实现 __call__(x, y) 方法,其中 x 和 y 是形状相同的类数组点坐标。

class matplotlib.tri.TrapezoidMapTriFinder(triangulation)[source]#

基类:TriFinder

使用 M. de Berg、M. van Kreveld、M. Overmars 和 O. Schwarzkopf 所著《计算几何,算法与应用》(第二版)一书中的梯形图算法实现的 TriFinder 类。

三角剖分必须有效,即不能有重复点、由共线点形成的三角形或重叠的三角形。该算法对由共线点形成的三角形具有一定的容忍度,但不应依赖于此。

class matplotlib.tri.TriInterpolator(triangulation, z, trifinder=None)[source]#

用于在三角网格上进行插值的抽象基类。

派生类实现以下方法

  • __call__(x, y),其中 x, y 是形状相同的类数组点坐标,并返回一个包含插值 z 值的形状相同的遮罩数组。

  • gradient(x, y),其中 x, y 是形状相同的类数组点坐标,并返回一个包含插值器两个导数(插值 z 值相对于 x 和 y 的导数)的两个形状相同的遮罩数组列表。

class matplotlib.tri.LinearTriInterpolator(triangulation, z, trifinder=None)[source]#

基类:TriInterpolator

三角网格上的线性插值器。

每个三角形都由一个平面表示,使得点 (x, y) 处的插值值位于包含 (x, y) 的三角形平面上。因此,插值值在三角剖分上是连续的,但其一阶导数在三角形之间的边处是不连续的。

参数:
triangulationTriangulation

要进行插值的三角剖分。

z(npoints,) 类数组对象

在网格点处定义的值数组,用于插值。

trifinderTriFinder, 可选

如果未指定,将通过调用Triangulation.get_trifinder来使用Triangulation的默认TriFinder。

方法

`__call__` (x, y)

(返回 (x, y) 点处的插值值。)

`gradient` (x, y)

(返回 (x, y) 点处的插值导数。)

gradient(x, y)[source]#

返回包含在指定 (x, y) 点处插值导数的 2 个遮罩数组列表。

参数:
x, y类数组

x 和 y 坐标的形状相同,并且可以是任意数量的维度。

返回:
dzdx, dzdynp.ma.array

2 个与 xy 形状相同的遮罩数组;对应于三角剖分外部的 (x, y) 点的值被遮罩掉。返回的第一个数组包含 \(\frac{\partial z}{\partial x}\) 的值,第二个数组包含 \(\frac{\partial z}{\partial y}\) 的值。

class matplotlib.tri.CubicTriInterpolator(triangulation, z, kind='min_E', trifinder=None, dz=None)[source]#

基类:TriInterpolator

三角网格上的三次插值器。

在一维空间中——在一个线段上——三次插值函数由函数值及其在两端的导数定义。这与在二维空间中三角形内部的情况几乎相同,不同之处在于函数值及其两次导数必须在每个三角形节点处定义。

CubicTriInterpolator 接收用户提供的每个节点处的函数值,并在内部计算导数值,从而实现平滑插值。(作为一项特殊功能,用户也可以指定每个节点处的导数值,但这并非预期的一般用法。)

参数:
triangulationTriangulation

要进行插值的三角剖分。

z(npoints,) 类数组对象

在网格点处定义的值数组,用于插值。

kind{'min_E', 'geom', 'user'},可选

平滑算法的选择,用于计算插值器的导数(默认为'min_E')

  • 如果为 'min_E':(默认)计算每个节点处的导数以最小化弯曲能量。

  • 如果为 'geom':每个节点处的导数计算为相关三角形法线的加权平均值。用于速度优化(大型网格)。

  • 如果为 'user':用户提供参数 dz,因此无需计算。

trifinderTriFinder, 可选

如果未指定,将通过调用 Triangulation.get_trifinder 使用 Triangulation 的默认 TriFinder。

dz类数组(dzdx, dzdy)元组,可选

仅当 *kind* ='user' 时使用。在这种情况下,*dz* 必须以 (dzdx, dzdy) 的形式提供,其中 dzdx, dzdy 是与 *z* 形状相同的数组,并且是 *triangulation* 点处的插值器一阶导数。

方法

`__call__` (x, y)

(返回 (x, y) 点处的插值值。)

`gradient` (x, y)

(返回 (x, y) 点处的插值导数。)

备注

本注释略带技术性,详细说明了三次插值是如何计算的。

插值基于 *triangulation* 网格的 Clough-Tocher 细分方案(更清楚地说,网格的每个三角形将分为 3 个子三角形,并且在每个子三角形上,插值函数是 2 个坐标的三次多项式)。这项技术源自 FEM(有限元方法)分析;所使用的元素是简化的 Hsieh-Clough-Tocher (HCT) 元素。其形状函数在 [1] 中有描述。组装后的函数保证是 C1 连续的,即它连续且其一阶导数也连续(这在三角形内部很容易证明,但在穿过边界时也成立)。

在默认情况下(*kind* ='min_E'),插值器在由 HCT 元素形状函数生成的函数空间上最小化曲率能量——在每个节点处有强制值但导数任意。最小化的泛函是所谓总曲率的积分(实现基于 [2] 中的算法 - PCG 稀疏求解器)

\[E(z) = \frac{1}{2} \int_{\Omega} \left( \left( \frac{\partial^2{z}}{\partial{x}^2} \right)^2 + \left( \frac{\partial^2{z}}{\partial{y}^2} \right)^2 + 2\left( \frac{\partial^2{z}}{\partial{y}\partial{x}} \right)^2 \right) dx\,dy\]

如果用户选择 *kind* ='geom' 情况,则使用简单的几何近似(三角形法线向量的加权平均值),这可以在非常大的网格上提高速度。

参考

[1]

Michel Bernadou, Kamal Hassan, "通用 Hsieh-Clough-Tocher 三角形的基函数,完整或简化。", 《国际工程数值方法杂志》,17(5):784 - 789. 2.01。

[2]

C.T. Kelley, "优化迭代方法"。

gradient(x, y)[source]#

返回包含在指定 (x, y) 点处插值导数的 2 个遮罩数组列表。

参数:
x, y类数组

x 和 y 坐标的形状相同,并且可以是任意数量的维度。

返回:
dzdx, dzdynp.ma.array

2 个与 xy 形状相同的遮罩数组;对应于三角剖分外部的 (x, y) 点的值被遮罩掉。返回的第一个数组包含 \(\frac{\partial z}{\partial x}\) 的值,第二个数组包含 \(\frac{\partial z}{\partial y}\) 的值。

class matplotlib.tri.TriRefiner(triangulation)[source]#

实现网格细化类的抽象基类。

TriRefiner 封装了一个 Triangulation 对象,并提供了网格细化和插值的工具。

派生类必须实现

class matplotlib.tri.UniformTriRefiner(triangulation)[source]#

基类:TriRefiner

通过递归细分进行的统一网格细化。

参数:
triangulationTriangulation

封装的三角剖分(待细化)

refine_field(z, triinterpolator=None, subdiv=3)[source]#

细化在封装三角剖分上定义的场。

参数:
z(npoints,) 类数组对象

待细化的场值,定义在封装三角剖分的节点处。(n_points 是初始三角剖分中的点数)

triinterpolatorTriInterpolator>,可选

用于场插值的插值器。如果未指定,将使用 CubicTriInterpolator>。

subdivint,默认值:3

细分的递归级别。每个三角形被划分为 4**subdiv 个子三角形。

返回:
refi_triTriangulation>

返回的细化三角剖分。

refi_z一维数组,长度:*refi_tri* 节点计数。

返回的插值场(在 *refi_tri* 节点处)。

refine_triangulation(return_tri_index=False, subdiv=3)[source]#

计算封装的 triangulation 的均匀细化三角剖分 *refi_triangulation*。

此函数通过将每个父三角形分割成在边中点节点上构建的 4 个子三角形来细化封装的三角剖分,递归 *subdiv* 次。最终,每个三角形因此被划分为 4**subdiv 个子三角形。

参数:
return_tri_indexbool,默认值:False

是否返回指示每个点的父三角形索引的索引表。

subdivint,默认值:3

细分的递归级别。每个三角形被划分为 4**subdiv 个子三角形;因此,默认情况下,初始三角剖分的每个三角形会产生 64 个细化后的子三角形。

返回:
refi_triangulationTriangulation>

细化后的三角剖分。

found_indexint 数组

对于 *refi_triangulation* 的每个点,包含该点的初始三角剖分三角形的索引。仅当 *return_tri_index* 设置为 True 时返回。

class matplotlib.tri.TriAnalyzer(triangulation)[source]#

定义三角网格分析和改进的基本工具。

TriAnalyzer 封装了一个 Triangulation> 对象,并提供了网格分析和网格改进的基本工具。

参数:
triangulationTriangulation

待分析的封装三角剖分。

属性:
scale_factors

将三角剖分重新缩放为单位正方形的因子。

circle_ratios(rescale=True)[source]#

返回三角剖分三角形平坦度的度量。

内切圆半径与外接圆半径之比是衡量三角形平坦度的常用指标。它始终 <= 0.5,且仅在等边三角形时 == 0.5。圆半径比低于 0.01 表示非常平坦的三角形。

为避免因两轴之间尺度差异导致不适当的低值,三角网格可以首先使用 scale_factors> 重新缩放以适应单位正方形内部(仅当 *rescale* 为 True 时,这是其默认值)。

参数:
rescalebool,默认值:True

如果为 True,则内部重新缩放(基于 scale_factors>),以便(未遮罩的)三角形正好适应单位正方形网格。

返回:
遮罩数组

封装三角剖分中每个“重新缩放”三角形的内切圆半径与外接圆半径之比。与被遮罩三角形对应的值被遮罩掉。

get_flat_tri_mask(min_circle_ratio=0.01, rescale=True)[source]#

从三角剖分中消除过平坦的边界三角形。

返回一个遮罩 *new_mask*,它允许根据 circle_ratios()> 清理封装三角剖分中位于边界的扁平三角形。此遮罩旨在随后使用 Triangulation.set_mask> 应用于三角剖分。*new_mask* 是初始三角剖分遮罩的扩展,即最初被遮罩的三角形将保持被遮罩。

*new_mask* 数组是递归计算的;在每一步中,只有当扁平三角形与当前网格边界共享一条边时才会被移除。因此,在三角化域中不会创建新的孔洞。

参数:
min_circle_ratiofloat,默认值:0.01

如果内切圆/外接圆半径比 r/R < *min_circle_ratio*,则会移除边界三角形。

rescalebool,默认值:True

如果为 True,则首先在内部重新缩放(基于 scale_factors>),以便(未遮罩的)三角形正好适应单位正方形网格。此重新缩放考虑了两个轴之间可能存在的尺度差异。

返回:
布尔数组

要应用于封装三角剖分的遮罩。所有最初被遮罩的三角形在新遮罩中仍保持被遮罩。

备注

此函数背后的基本原理是,Delaunay 三角剖分(用于非结构化点集)有时在其边界处包含几乎扁平的三角形,这会导致绘图中的伪影(特别是对于高分辨率等高线图)。使用计算出的 *new_mask* 进行遮罩后,封装的三角剖分将不再包含圆半径比低于 *min_circle_ratio* 的未遮罩边界三角形,从而提高后续绘图或插值的网格质量。

property scale_factors#

将三角剖分重新缩放为单位正方形的因子。

返回:
(浮点数, 浮点数)

缩放因子 (kx, ky),使得三角剖分 [triangulation.x * kx, triangulation.y * ky] 恰好适应单位正方形。