使用多个补丁在matplotlib中裁剪图像
我在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')
裁剪前的图:

裁剪后的图:
