2011-11-14 11 views
5

私は英国の地図の境界線にクリップしたいピラブのプロットを持っています。 1つのパッチが見事に作品のプロットをクリッピングなど、matplotlibでいくつかのパッチを使って画像をクリップ

をウェールズのための1つをイングランド1:私はまた、それぞれの国のアウトラインが含まれている一連のパッチを作った

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

しかし、もし私が1つ以上のことをしようとすると、それは私には何も残さない - 明らかに、プロットのどの部分も各国内に同時に存在しないからです。

「OR」タイプのステートメントを使用してクリップする方法を知っている人はいますか? (つまり、このパッチまたはこのパッチ内であればクリップしません)。

+0

私はパッチで作業していませんが、一緒に追加できる方法はありますか? –

+0

ちなみに、マップが必要なことをやっているのなら、私はマップマップのためのベースマップ、matplotlib拡張を見つけたと思いますか? –

+0

ありがとう、トーマス - はい、私はベースマップを見つけました。地理的な地点/国境などのプロットには最適ですが、この例では実際にうまくいくでしょう。 Byt私はマップの境界に合わせることができるKDEのようなプロットを作成する方法をまだ研究しておらず、もっと一般的な解決策を探していました。 –

答えて

6

私は、複数の散布図を作成し、それぞれにユニークなパッチ(例えば、イングランドを持つもの、アイルランドを持つものなど)をクリッピングすることでこれを行うことができると思います。パッチ前

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 これはつまり、あなたが尋ねないかもしれないけど「?誰が私は 『OR』タイプのステートメントを使用してクリッピングすることができます方法を知っています」、それは同じ効果を持っている必要がありますパッチの後: enter image description here

+0

ありがとうございましたYann!いい案。 –

+0

問題は@ハンナフライで、あなたの "答え"を考えれば、それを左側で確認してください。そうでなければ誰かがあなたにもっと具体的な答えを与えることができれば幸いです。 – Yann

関連する問題