使用 matplotlib 中的多个补丁剪辑图像

发布于 2024-12-15 14:53:33 字数 376 浏览 0 评论 0原文

我在 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”类型语句进行剪辑? (即,如果在这个补丁或这个补丁中,则不要剪辑)。

I have a plot in pylab which I want to clip to the borders of a map of the UK.

I've also made a series of patches which contain the outlines of each country: one for England, one for Wales etc.

Clipping the plot one patch works brilliantly:

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

But if I try and do it for more than one, it leaves me with nothing - understandably, since no part of the plot is within each country simultaneously.

Does anyone know how I can clip using an 'OR' type statement? (ie. don't clip if within this patch or this one etc).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柠檬 2024-12-22 14:53:33

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

在补丁之前:
在此处输入图像描述
打补丁后:
在此处输入图像描述

I think you can do this by making multiple scatter plots, clipping each one with a unique patch (eg one has England, one has Ireland, etc). Though this might not be what you asked for, ie "Does anyone know how I can clip using an 'OR' type statement?", it should have the same effect:

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

Before the patches:
enter image description here
After the patches:
enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文