如何在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.
相关产品推荐
相关产品推荐

