最简单的方法是设置一个剪辑矩形,隐藏矩形之外的所有内容。由于您已经有了一个矩形,因此可以使用它来剪辑自身。
由于边框是以边框线为中心绘制的,因此一半会被剪掉。这可以通过将宽度设置为所需宽度的两倍来解决。
请注意,为了根据需要进行裁剪,矩形已经需要转换为轴坐标。因此,首先将矩形面片添加到斧头,然后使用 is 设置剪切。
另请注意,使用默认参数时,矩形的内部和细边框使用相同的颜色。将线宽设置为零可确保它不会绘制在矩形之外。
同样,椭圆只能在内部用线绘制。
下面的代码使用 10 的粗细和一些额外的红色虚线来说明发生的情况。
import matplotlib.pyplot as plt
import matplotlib.patches as patches
fig, ax = plt.subplots()
pad = 0.1 # distance between the rectangles
for i in range(3):
for j in range(2):
x = .5 + i * (1 + pad)
y = .5 + j * (1 + pad)
if i == j:
patch = patches.Rectangle((x, y), 1, 1, facecolor='blue', linewidth=0)
elif i < 2:
patch = patches.Rectangle((x, y), 1, 1, facecolor='none', edgecolor='black',
linewidth=10*2 if j == 0 else 10)
else:
patch = patches.Ellipse((x+0.5, y+0.5), 1, 1, facecolor='none', edgecolor='black',
linewidth=10*2 if j == 0 else 10)
ax.add_patch(patch)
if j == 0:
patch.set_clip_path(patch)
for i in range(3):
x = .5 + i * (1 + pad)
for s in 0,1:
ax.axvline (x+s, color='crimson', ls=':', lw=1)
for j in range(2):
y = .5 + j * (1 + pad)
for s in 0,1:
ax.axhline (y+s, color='crimson', ls=':', lw=1)
ax.set_xlim([0, 4.0])
ax.set_ylim([0, 3.0])
ax.set_aspect('equal')
plt.show()
下图显示了在顶部绘制、在底部使用双线宽裁剪的标准方法。