使用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)

但是,如果我尝试做一个以上的事情,那将使我一事无成-可以理解,因为每个国家的地块都不同时存在。

有谁知道我如何使用“ OR”类型语句进行裁剪?(即,不要在此补丁程序或该补丁程序之内等剪辑)。


问题答案:

我认为您可以通过制作多个散点图,用一个唯一的补丁裁剪每个散点图(例如,一个具有英格兰,一个具有爱尔兰等)来做到这一点。尽管这可能不是您所要求的,即“有人知道我可以使用’OR’类型的语句进行裁剪吗?”,但它应该具有相同的效果:

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')

补丁之前:补丁 在此处输入图片说明 之后:
在此处输入图片说明