2011-11-14 12 views
5

में कई पैच का उपयोग करके एक छवि क्लिप करें मेरे पास पिलैब में एक साजिश है जिसे मैं ब्रिटेन के मानचित्र की सीमाओं पर क्लिप करना चाहता हूं।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

संयोग से, यदि आप किसी मानचित्र की आवश्यकता वाले कुछ कर रहे हैं, तो मुझे लगता है कि आपको नक्शा बनाने के लिए बेसमैप, मैटलप्लिब एक्सटेंशन मिला है? –

+0

धन्यवाद थॉमस - हाँ, मुझे बेसमैप मिला है। भूगर्भीय बिंदु/अंतर-देश प्रवाह आदि की साजिश के लिए यह बहुत अच्छा है, और वास्तव में इस उदाहरण में अच्छी तरह से काम करेगा। बाइट मैंने अभी तक काम नहीं किया है कि कैसे केडीई की तरह प्लॉट बनाने के लिए जो नक्शा सीमा के साथ संरेखित कर सकते हैं, और मैं एक और सामान्य समाधान की तलाश में हूं। –

उत्तर

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 पैच के बाद: enter image description here

+0

धन्यवाद यान! महान विचार। –

+0

कोई समस्या नहीं @ hannah-fry, अगर आप अपना "उत्तर" मानते हैं, तो कृपया इसे बाईं ओर जांचें। अन्यथा उम्मीद है कि कोई आपको एक और विशिष्ट उत्तर दे सकता है। – Yann