使用多个补丁在matplotlib中裁剪图像

7 投票
1 回答
2963 浏览
提问于 2025-04-17 06:18

我在pylab里有一个图表,我想把它裁剪到英国地图的边界上。

我还制作了一系列的补丁,这些补丁包含了每个国家的轮廓:一个是英格兰的,一个是威尔士的,等等。

用一个补丁裁剪图表效果很好:

fig = plt.figure()
ax = fig.add_subplot(111)
im = ax.scatter(x,y,c = z)
ax.add_patch(patch)
im.set_clip_path(patch)

但是如果我尝试用多个补丁裁剪,就什么都没剩下了——这很正常,因为没有任何部分同时在每个国家的范围内。

有没有人知道我该如何使用“或”的方式来裁剪?(也就是说,如果在这个补丁内或者那个补丁内,就不裁剪)。

1 个回答

8

我觉得你可以通过制作多个散点图来实现这个效果,每个散点图用一个独特的图形来裁剪(比如一个图形裁剪英国,一个裁剪爱尔兰,等等)。虽然这可能不是你问的那种方法,比如“有没有人知道我怎么用‘或’类型的语句来裁剪?”,但效果应该是一样的:

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

np.random.seed(101)
x = np.random.random(100)
y = np.random.random(100)

fig = plt.figure()
ax = fig.add_subplot(111)
imForEngland = ax.scatter(x,y)
fig.savefig('beforeclip.png')
imForWales = ax.scatter(x,y)
england = patches.Circle((.75,.75),radius=.25,fc='none')
wales = patches.Circle((.25,.25),radius=.25,fc='none')
ax.add_patch(england)
ax.add_patch(wales)
imForEngland.set_clip_path(england)
imForWales.set_clip_path(wales)

fig.savefig('afterclip.png')

裁剪前的图:

enter image description here

裁剪后的图:

enter image description here

撰写回答