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

如何在Matplotlib(Python)中挖空Patch实现反裁剪效果

在Matplotlib中实现Patch的透明挖空(反向裁剪)

用白色Patch覆盖的方式做挖空会遮挡底层图形,要实现真正的透明挖空,可以利用Matplotlib的Path组合功能,通过路径差集创建带镂空的形状,效果相当于set_clip_path的反向操作。

实现思路

通过Path.combine()方法,将原始形状的路径与挖空形状的路径做差集运算(PathOperation.SUBTRACT),生成带镂空区域的复合路径,再用PathPatch绘制这个复合路径,挖空区域会完全透明,直接透出底层图形。

完整代码示例

import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse, Rectangle, PathPatch
from matplotlib.path import Path
from matplotlib.path import PathOperation

# 创建底层红色矩形
rectangle = Rectangle((-2.5, -2), 5, 2, color='red')

# 定义原始椭圆和需要挖空的椭圆
ellipse_1 = Ellipse((0, 0), 4, 3)
ellipse_2 = Ellipse((0.5, 0.25), 2, 1, angle=30)

# 将椭圆转换为带位置变换的路径
path1 = ellipse_1.get_path() * ellipse_1.get_transform()
path2 = ellipse_2.get_path() * ellipse_2.get_transform()

# 路径组合:原始路径减去挖空路径(差集运算)
combined_path = Path.combine(path1, path2, PathOperation.SUBTRACT)

# 创建带挖空效果的Patch
hollow_ellipse = PathPatch(combined_path, color='blue')

# 绘图展示
ax = plt.axes()
ax.add_artist(rectangle)
ax.add_artist(hollow_ellipse)

plt.axis('equal')
plt.axis((-3, 3, -3, 3))
plt.show()

关键细节

  • Path.combine()支持多种路径运算,包括INTERSECT(交集)、UNION(并集)等,可满足不同形状组合需求
  • 必须给路径应用Patch的变换(get_transform()),否则组合后的形状位置会偏移
  • 这种方式生成的挖空是真正的透明,底层图形会完整显示在镂空区域内,不会被遮挡

内容的提问来源于stack exchange,提问作者Adrián T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:22:43