You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Matplotlib如何仅显示三角形区域内等高线,tricontourf怎么用

实现方案

方案1:对现有contourf对象直接设置裁剪路径(推荐,改动最小)

不需要修改你已有的网格数据和contourf绘制逻辑,直接通过matplotlib自带的路径裁剪功能实现三角形外的区域剔除,裁剪边缘平滑无锯齿,不需要提高网格分辨率。
示例代码如下:

import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
import numpy as np

# --------------- 以下为你原有代码逻辑,可保留 ---------------
# 示例:生成方形网格和Z数据,替换为你自己的实际数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 定义三角形三个顶点坐标,替换为你实际的三角形顶点
tri_vertices = np.array([[0, 4], [-4, -2], [4, -2]])
# --------------------------------------------------------

fig, ax = plt.subplots()
# 绘制等高线
contour_obj = ax.contourf(X, Y, Z, levels=20)
# 创建三角形patch
tri_patch = Polygon(tri_vertices, closed=True, fill=False, edgecolor="black")
# 给所有等高线集合设置裁剪路径
for collection in contour_obj.collections:
    collection.set_clip_path(tri_patch)
# 按需添加三角形边框
ax.add_patch(tri_patch)

ax.set_aspect("equal")
plt.show()

方案2:使用tricontourf实现

tricontourf确实是合适的实现方案,如果你原始数据为散点、无需生成方形网格,通过对三角剖分添加掩码即可裁剪非目标区域,省去方形网格插值的步骤。
示例代码如下:

import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.path import Path
import matplotlib.tri as tri
import numpy as np

# 示例散点数据,替换为你自己的x,y,z数据
x = np.random.uniform(-5, 5, 5000)
y = np.random.uniform(-5, 5, 5000)
Z = np.sin(np.sqrt(x**2 + y**2))
tri_vertices = np.array([[0, 4], [-4, -2], [4, -2]])

# 生成非结构化三角剖分
triang = tri.Triangulation(x, y)
# 生成掩码:剔除三角形外的三角单元
tri_path = Path(tri_vertices)
tri_center = triang.triangles.mean(axis=1)
mask = ~tri_path.contains_points(tri_center)
triang.set_mask(mask)

# 绘制裁剪后的等高线
fig, ax = plt.subplots()
ax.tricontourf(triang, Z, levels=20)
# 按需添加三角形边框
ax.add_patch(Polygon(tri_vertices, closed=True, fill=False, edgecolor="black"))

ax.set_aspect("equal")
plt.show()

方案选择建议

  • 如果你已经完成了方形网格生成、Z值计算,优先选择方案1,仅需新增3行代码即可实现需求,无需修改原有逻辑。
  • 如果你还未生成方形网格、原始数据为散点格式,选择方案2效率更高。

内容的提问来源于stack exchange,提问作者lefe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:24:01