matplotlib.tri
#
非结构化三角网格函数。
- class matplotlib.tri.Triangulation(x, y, triangles=None, mask=None)[源代码][源代码]#
一个由 npoints 个点和 ntri 个三角形组成的无结构三角网格。三角形可以由用户指定,也可以使用 Delaunay 三角剖分自动生成。
- 参数:
- x, y(npoints,) 类数组
网格点的坐标。
- 三角形(ntri, 3) 的类数组对象,可选
对于每个三角形,构成三角形的三个点的索引,按逆时针顺序排列。如果未指定,则计算Delaunay三角剖分。
- 掩码(ntri,) 类似数组的对象,可选,布尔值
哪些三角形被遮蔽。
- 属性:
- 三角形(ntri, 3) 的整数数组
对于每个三角形,构成三角形的三个点的索引,按逆时针顺序排列。如果你想考虑 mask ,请使用
get_masked_triangles
代替。- 掩码(ntri, 3) 的布尔数组或 None
被遮蔽的三角形。
- is_delaunay布尔
三角剖分是否是计算出的德劳内三角剖分(其中未指定 三角形 )。
注释
为了使三角剖分有效,它不能有重复的点、由共线点形成的三角形,或重叠的三角形。
- calculate_plane_coefficients(z)[源代码][源代码]#
计算所有未屏蔽三角形的平面方程系数,从点 (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) 的整数数组,包含所有非掩码三角形的边。
每一行通过其起始点和结束点的索引定义一条边。每条边仅出现一次,即对于点 i 和 j 之间的边,只会存在 (i, j) 或 (j, i) 中的一个。
- static get_from_args_and_kwargs(*args, **kwargs)[源代码][源代码]#
从 args 和 kwargs 返回一个 Triangulation 对象,并移除已消耗的值后的剩余 args 和 kwargs。
有两种选择:要么第一个参数是一个 Triangulation 对象,在这种情况下它会被返回,要么 args 和 kwargs 足以创建一个新的 Triangulation 并返回。在后一种情况下,请参阅 Triangulation.__init__ 以了解可能的 args 和 kwargs。
- get_trifinder()[源代码][源代码]#
返回此三角剖分的默认
matplotlib.tri.TriFinder
,如有必要则创建它。这允许相同的 TriFinder 对象可以轻松共享。
- property neighbors#
返回形状为 (ntri, 3) 的整数数组,包含相邻三角形。
对于每个三角形,共享相同边的三个三角形的索引,如果没有这样的相邻三角形则为 -1。
neighbors[i, j]
是与从点索引triangles[i, j]
到点索引triangles[i, (j+1)%3]
的边相邻的三角形。
- class matplotlib.tri.TriContourSet(ax, *args, **kwargs)[源代码][源代码]#
基类:
ContourSet
为三角网格创建并存储一组等高线或填充区域。
这个类通常不由用户直接实例化,而是由
tricontour
和tricontourf
实例化。- 属性:
- ax
Axes
绘制等高线的 Axes 对象。
- 集合 :
silent_list
的PathCollection
sPathCollections 的 silent_list 表示等高线的`.Artist`。这是一个包含线条和填充等高线的`.PathCollection`列表。
- 级别数组
等高线级别的值。
- 层数组
与线等高线的级别相同;填充等高线级别的中间。参见
ContourSet._process_colors
。
- ax
根据关键字参数 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>, 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>)[源代码]#
一次性设置多个属性。
支持的属性有
属性
描述
一个过滤函数,它接受一个 (m, n, 3) 浮点数组和一个 dpi 值,并返回一个 (m, n, 3) 数组和两个从图像左下角开始的偏移量
类数组或标量或无
布尔
抗锯齿
或 aa 或 antialiaseds布尔值或布尔值列表
类数组或无
CapStyle
或 {'butt', 'projecting', 'round'}(vmin: 浮点数, vmax: 浮点数)
BboxBase
或 None布尔
补丁或(路径,变换)或无
Colormap
或 str 或 Nonecolor 或 RGBA 元组的列表
edgecolor
或 ec 或 edgecolorsfacecolor
或 facecolors 或 fcstr
{'/', '', '|', '-', '+', 'x', 'o', 'O', '.', '*'}
布尔
JoinStyle
或 {'miter', 'round', 'bevel'}对象
linestyle
或虚线或线型或 lsstr 或 tuple 或其列表
linewidth
或 linewidths 或 lw浮点数或浮点数列表
布尔
Normalize
或 str 或 Noneoffset_transform
或 transOffset(N, 2) 或 (2,) 数组类
未知
None 或 bool 或 float 或 callable
浮动
布尔
(scale: float, length: float, randomness: float)
布尔值或无
str
list of str or None
布尔
浮动
- class matplotlib.tri.TriFinder(triangulation)[源代码][源代码]#
用于查找三角剖分中 (x, y) 点所在三角形的类的抽象基类。
与其实例化一个从 TriFinder 派生的类的对象,通常使用函数
Triangulation.get_trifinder
会更好。派生类实现了 __call__(x, y) 方法,其中 x 和 y 是具有相同形状的类数组点坐标。
- class matplotlib.tri.TrapezoidMapTriFinder(triangulation)[源代码][源代码]#
基类:
TriFinder
TriFinder
类使用了《计算几何:算法与应用》第二版中由 M. de Berg、M. van Kreveld、M. Overmars 和 O. Schwarzkopf 提出的梯形图算法实现。三角剖分必须是有效的,即它不能有重复的点、由共线点形成的三角形,或重叠的三角形。该算法对由共线点形成的三角形有一定的容忍度,但这不应依赖。
- class matplotlib.tri.TriInterpolator(triangulation, z, trifinder=None)[源代码][源代码]#
用于在三角形网格上进行插值的类的抽象基类。
派生类实现了以下方法:
__call__(x, y)
,其中 x, y 是形状相同的类数组点坐标,并返回一个包含插值 z 值的相同形状的掩码数组。gradient(x, y)
,其中 x, y 是具有相同形状的类数组点坐标,并返回一个包含两个相同形状的掩码数组的列表,这些数组包含插值器的两个导数(插值 z 值相对于 x 和 y 的导数)。
- class matplotlib.tri.LinearTriInterpolator(triangulation, z, trifinder=None)[源代码][源代码]#
-
三角网格上的线性插值器。
每个三角形由一个平面表示,使得在点 (x, y) 处的插值值位于包含 (x, y) 的三角形的平面上。因此,插值值在整个三角剖分上是连续的,但它们的一阶导数在三角形之间的边缘处是不连续的。
- 参数:
- 三角剖分 :
Triangulation
三角测量 用于插值的三角剖分。
- z(npoints,) 类数组
在网格点定义的值数组,用于插值。
- trifinder :
TriFinder
, 可选TriFinder,可选 如果没有指定,将通过调用
Triangulation.get_trifinder
使用三角剖分的默认 TriFinder。
- 三角剖分 :
方法
`__call__` (x, y)
(在 (x, y) 点返回插值值。)
`gradient` (x, y)
(返回在 (x, y) 点插值的导数。)
- class matplotlib.tri.CubicTriInterpolator(triangulation, z, kind='min_E', trifinder=None, dz=None)[源代码][源代码]#
-
三角网格上的三次插值器。
在一维 - 在一段上 - 一个三次插值函数由函数及其在两端的导数值定义。在二维中,在三角形内部,情况几乎相同,只是函数及其两个导数在每个三角形节点上的值需要定义。
CubicTriInterpolator 获取函数在每个节点处的值(由用户提供),并在内部计算导数的值,从而实现平滑插值。(作为一个特殊功能,用户也可以在每个节点处施加导数的值,但这并不是常见的使用方式。)
- 参数:
- 三角剖分 :
Triangulation
三角测量 用于插值的三角剖分。
- z(npoints,) 类数组
在网格点定义的值数组,用于插值。
- 种类{'min_E', 'geom', 'user'}, 可选
选择平滑算法,以便计算插值导数(默认为 'min_E'):
如果 'min_E': (默认) 每个节点的导数被计算以最小化弯曲能量。
如果 'geom':每个节点的导数计算为相关三角形法线的加权平均值。用于速度优化(大网格)。
如果 'user':用户提供参数 dz,因此不需要进行计算。
- trifinder :
TriFinder
, 可选TriFinder,可选 如果未指定,将通过调用
Triangulation.get_trifinder
使用三角剖分的默认 TriFinder。- dz数组元组 (dzdx, dzdy),可选
仅在 kind ='user' 时使用。在这种情况下,dz 必须作为 (dzdx, dzdy) 提供,其中 dzdx, dzdy 是与 z 形状相同的数组,并且是 triangulation 点处的插值一阶导数。
- 三角剖分 :
方法
`__call__` (x, y)
(在 (x, y) 点返回插值值。)
`gradient` (x, y)
(返回在 (x, y) 点插值的导数。)
注释
这个注释有点技术性,详细说明了如何计算三次插值。
插值基于 三角剖分 网格的 Clough-Tocher 细分方案(为了更清楚,网格的每个三角形将被分成3个子三角形,并且在每个子三角形上,插值函数是2个坐标的立方多项式)。这项技术起源于有限元法(FEM)分析;使用的单元是简化的 Hsieh-Clough-Tocher(HCT)单元。其形状函数在 [1] 中描述。组装后的函数保证是 C1 光滑的,即它是连续的,并且其一阶导数也是连续的(这在三角形内部很容易证明,但在跨越边缘时也是如此)。
在默认情况下(kind ='min_E'),插值器在由HCT元素形状函数生成的函数空间上最小化曲率能量——在每个节点处施加值但导数任意。最小化的泛函是所谓的总曲率的积分(基于[R0be0c58fd53f-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, "优化迭代方法"。
- class matplotlib.tri.TriRefiner(triangulation)[源代码][源代码]#
实现网格细化的类的抽象基类。
TriRefiner 封装了一个 Triangulation 对象,并提供了网格细化和插值的工具。
派生类必须实现:
refine_triangulation(return_tri_index=False, **kwargs)
,其中可选的关键字参数 kwargs 在每个 TriRefiner 具体实现中定义,并返回:一个精细的三角剖分,
可选地(取决于 return_tri_index ),对于细化三角剖分的每个点:它所属的初始三角剖分三角形的索引。
refine_field(z, triinterpolator=None, **kwargs)
,其中:z 字段值数组(待细化)定义在基础三角剖分节点上,
triinterpolator 是一个可选的
TriInterpolator
,其他可选的关键字参数 kwargs 在每个 TriRefiner 具体实现中定义;
并返回(作为元组)一个精炼的三角网格以及在精炼三角剖分节点处插值的场值。
- class matplotlib.tri.UniformTriRefiner(triangulation)[源代码][源代码]#
基类:
TriRefiner
通过递归细分实现均匀网格细化。
- 参数:
- 三角剖分 :
Triangulation
三角测量 封装的三角剖分(待细化)
- 三角剖分 :
- refine_field(z, triinterpolator=None, subdiv=3)[源代码][源代码]#
细化封装三角剖分上定义的字段。
- 参数:
- z(npoints,) 类数组
在封装三角剖分的节点上定义的细化字段的值。(
n_points
是初始三角剖分中的点数)- triinterpolator :
TriInterpolator
, 可选TriInterpolator,可选 用于字段插值的插值器。如果未指定,将使用
CubicTriInterpolator
。- 子划分int, 默认值: 3
细分递归层级。每个三角形被细分为
4**subdiv
个子三角形。
- 返回:
- refi_tri三角测量
返回的细化三角剖分。
- refi_z : 长度为 refi_tri 节点数的 1D 数组。长度为 1D 的数组:
返回的内插字段(在 refi_tri 节点处)。
- refine_triangulation(return_tri_index=False, subdiv=3)[源代码][源代码]#
计算封装
triangulation
的均匀细化三角剖分 refi_triangulation。此函数通过将每个父三角形分割成基于边中点节点的4个子三角形来细化封装的三角剖分,递归 subdiv 次。最终,每个三角形被分割成
4**subdiv
个子三角形。- 参数:
- return_tri_indexbool, 默认: False
是否返回一个索引表,指示每个点的父三角形索引。
- 子划分int, 默认值: 3
细分级别的递归。每个三角形被细分为
4**subdiv
个子三角形;因此,默认情况下,每个初始三角剖分的三角形会产生64个细化的子三角形。
- 返回:
- refi_triangulation三角测量
精细的三角剖分。
- found_indexint 数组
初始三角剖分的索引,包含每个 refi_triangulation 点的三角形。仅当 return_tri_index 设置为 True 时返回。
- class matplotlib.tri.TriAnalyzer(triangulation)[源代码][源代码]#
定义用于三角网格分析和改进的基本工具。
一个 TriAnalyzer 封装了一个
Triangulation
对象,并提供了基本的网格分析和网格改进工具。- 参数:
- 三角剖分 :
Triangulation
三角测量 要分析的封装三角剖分。
- 三角剖分 :
- 属性:
scale_factors
将三角剖分重新缩放到单位正方形的因素。
- circle_ratios(rescale=True)[源代码][源代码]#
返回三角剖分三角形平坦度的度量。
内切圆半径与外接圆半径的比率是广泛用于衡量三角形扁平度的指标。它总是
<= 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)[源代码][源代码]#
从三角剖分中消除过于平坦的边界三角形。
返回一个掩码 new_mask,该掩码用于清除封装三角剖分中的边界定位的平坦三角形(根据它们的
circle_ratios()
)。此掩码旨在随后使用Triangulation.set_mask
应用于三角剖分。new_mask 是初始三角剖分掩码的扩展,因为初始掩码的三角形将保持掩码状态。new_mask 数组是递归计算的;在每一步中,只有与当前网格边界共享一边的平坦三角形才会被移除。因此,三角域中不会创建新的孔洞。
- 参数:
- min_circle_ratiofloat, 默认值: 0.01
如果内切圆/外接圆半径比 r/R 小于 min_circle_ratio,则边界三角形将被移除。
- rescalebool, 默认值: True
如果为真,首先,根据
scale_factors
在内部进行缩放,使得(未遮罩的)三角形完全适合单位正方形网格内。这种缩放考虑了两个轴之间可能存在的比例差异。
- 返回:
- 布尔数组
应用于封装三角剖分的掩码。所有初始掩码的三角形在 new_mask 中仍然保持掩码状态。
注释
这个函数的原理是,Delaunay 三角剖分(对于一组非结构化的点)有时在其边界包含几乎扁平的三角形,这会导致绘图中的伪影(特别是在高分辨率等高线图中)。通过计算的 new_mask 进行掩码处理后,封装的三角剖分将不再包含圆比率低于 min_circle_ratio 的未掩码边界三角形,从而提高了后续绘图或插值的网格质量。
- property scale_factors#
将三角剖分重新缩放到单位正方形的因素。
- 返回:
- (浮点数, 浮点数)
缩放因子 (kx, ky) 使得三角剖分
[triangulation.x * kx, triangulation.y * ky]
恰好适合于一个单位正方形内。