2011-11-14 95 views
5

我在pylab一个阴谋,我想夹到地图英国边境剪辑的图像。使用多个补丁matplotlib

我也做了一系列包含每个国家的轮廓补丁:一个英格兰,一个威尔士等

裁剪图一个补丁出色的作品:

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”语句类型剪辑? (也就是说,如果在这个补丁或这个补丁中,不要剪辑)。

+0

我还没有补丁的工作,但有可以将它们加在一起的方法吗? –

+0

顺便说一下,如果你正在做的事情,需要一个地图,我想你已经发现底图,一个matplotlib扩展绘制的地图? –

+0

谢谢托马斯 - 是的,我找到了底图。这对绘制地理位置点/国家间流量等非常有用,而且在这个例子中实际上可以很好地工作。 Byt我还没有研究出如何创建可以与地图边界对齐的KDE的地块,我一直在寻找更一般的解决方案。 –

回答

6

我想你可以通过多个散点图,剪裁每一个有独特的补丁(例如,一个有英格兰,一个拥有爱尔兰等)做到这一点。虽然这可能不是你问什么,即“没有人知道我可以用‘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') 

补丁之前: enter image description here 补丁后: enter image description here

+0

谢谢Yann!好想法。 –

+0

没问题@汉娜炒,如果你认为你的“答案”,那么请检查它在左边。否则希望有人可以给你一个更具体的答案。 – Yann