2011-11-14 6 views
5

Mam spisek w pirlab, który chcę przypiąć do granic mapy Wielkiej Brytanii.Klip obraz za pomocą kilku poprawek w matplotlib

Mam również szereg poprawek, które zawierają zarysy poszczególnych krajach: jeden dla Anglii, po jednym dla Walii itp

przycinanie działkę jeden plaster działa znakomicie:

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

Ale jeśli spróbuję zrobić to dla więcej niż jednego, to pozostawi mnie z niczym - co zrozumiałe, ponieważ żadna część spisku nie znajduje się wewnątrz każdego kraju jednocześnie.

Czy ktoś wie, jak klipować za pomocą instrukcji typu "OR"? (tj. nie klipuj jeśli w tej łatce lub tym itd.).

+0

Nie pracowałem z łatkami, ale czy istnieje sposób ich zsumowania? –

+0

Nawiasem mówiąc, jeśli robisz coś, co wymaga mapy, zakładam, że znalazłeś mapę bazową, rozszerzenie matplotlib do rysowania map? –

+0

Dziękuję Thomas - tak, znalazłem mapę bazową. Świetnie nadaje się do kreślenia punktów geolokalizacyjnych/przepływów między krajami itp., A w rzeczywistości będzie dobrze działać w tym przykładzie. Byt Jeszcze nie opracowałem sposobu tworzenia działek takich jak KDE, które mogą być zgodne z granicą mapy, i szukałem bardziej ogólnego rozwiązania. –

Odpowiedz

6

Myślę, że można to zrobić, wykonując wiele wykresów punktowych, wycinając każdy z unikatową łatką (np. Jeden ma Anglię, jeden ma Irlandię itd.). Pomimo tego, że nie może być to, co prosiłeś, czyli „Czy ktoś wie jak mogę clip za pomocą komunikatu typu AN«lub»?”, Powinna mieć ten sam efekt:

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

Przed plastrów: enter image description here Po poprawkach: enter image description here

+0

Dzięki Yann! Świetny pomysł. –

+0

Nie ma problemu @ hannah-fry, jeśli uważasz, że twoja "odpowiedź", to sprawdź to po lewej stronie. W przeciwnym razie, na przykład, ktoś może udzielić bardziej konkretnej odpowiedzi. – Yann

Powiązane problemy