【问题标题】:Clip an image using several patches in matplotlib使用 matplotlib 中的多个补丁剪辑图像
【发布时间】:2011-12-28 21:29:38
【问题描述】:

我在 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”类型语句进行剪辑? (即,如果在此补丁或此补丁中,请勿剪辑)。

【问题讨论】:

  • 我没有使用过补丁,但是有没有办法可以将它们添加到一起?
  • 顺便说一句,如果你正在做一些需要地图的事情,我假设你已经找到了底图,一个用于绘制地图的 matplotlib 扩展?
  • 谢谢你,Thomas - 是的,我找到了底图。它非常适合绘制地理定位点/国家间流动等,实际上在这个例子中效果很好。顺便说一句,我还没有弄清楚如何创建像 KDE 这样可以与地图边界对齐的绘图,我一直在寻找更通用的解决方案。

标签: python matplotlib patch clip


【解决方案1】:

我认为您可以通过制作多个散点图来做到这一点,并用一个独特的补丁裁剪每个散点图(例如,一个有英格兰,一个有爱尔兰,等等)。尽管这可能不是您所要求的,即“有人知道我如何使用 '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')

补丁前: 补丁后:

【讨论】:

  • 没问题@hannah-fry,如果您认为这是您的“答案”,请在左侧查看。否则希望有人能给你一个更具体的答案。
  • 我正在尝试使用 pandas plot 来完成,但剪辑没有完成。有谁知道为什么?我在做:imForWales = df.plot(x ='x', y='y', kind = 'scatter')
猜你喜欢
  • 2012-05-10
  • 2020-12-11
  • 1970-01-01
  • 2013-02-08
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
相关资源
最近更新 更多