2012-09-03 15 views
10

पर आयतों को कैसे आकर्षित करें मैं बेसमैप पर भरे आयताकारों को साजिश करने का एक तरीका ढूंढ रहा हूं। मैं आसानी से drawgreatcircle विधि का उपयोग कर आयत के किनारों को खींच सकता हूं, लेकिन मुझे वास्तव में इन आयतों को भरने का कोई तरीका नहीं मिल रहा है (रंग और अल्फा निर्दिष्ट करना)।बेसमेप

उत्तर

24

आप एक matplotlib.patches.Polygon() सीधे अपने अक्षों में जोड़ सकते हैं। सवाल यह है कि क्या आप चाहते हैं कि आपके आयताकार साजिश निर्देशांक (साजिश पर सीधी रेखाएं) या नक्शा निर्देशांक (साजिश पर महान मंडल) में परिभाषित करें। किसी भी तरह से, आप नक्शा निर्देशांक में शिखर निर्दिष्ट करते हैं और फिर उन्हें बेसमैप इंस्टेंस (m() नीचे दिए गए उदाहरण में) कॉल करके निर्देशांक साजिश में बदलने के लिए, पॉलीगॉन स्वयं बनाएं, और इसे मैन्युअल रूप से अक्षरों में प्रस्तुत करने के लिए जोड़ें।

साजिश में परिभाषित आयतों के लिए निर्देशांक, यहाँ एक उदाहरण है:

from mpl_toolkits.basemap import Basemap 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.patches import Polygon 

def draw_screen_poly(lats, lons, m): 
    x, y = m(lons, lats) 
    xy = zip(x,y) 
    poly = Polygon(xy, facecolor='red', alpha=0.4) 
    plt.gca().add_patch(poly) 

lats = [ -30, 30, 30, -30 ] 
lons = [ -50, -50, 50, 50 ] 

m = Basemap(projection='sinu',lon_0=0) 
m.drawcoastlines() 
m.drawmapboundary() 
draw_screen_poly(lats, lons, m) 

plt.show() 

मानचित्र निर्देशांक में परिभाषित आयतों लिए, एक ही दृष्टिकोण का उपयोग, लेकिन निर्देशांक प्लॉट करने के लिए बदलने से पहले नक्शा अंतरिक्ष में अपनी लाइन को जोड़। प्रत्येक रेखा खंड के लिए, आप करना होगा:

lats = np.linspace(lat0, lat1, resolution) 
lons = np.linspace(lon0, lon1, resolution) 

फिर साजिश के साथ समन्वय कोई बहुभुज बनाएं (, जैसा कि ऊपर m() के साथ) को बदलने इन मानचित्र निर्देशांक प्लॉट करने के लिए समन्वय करता है और फिर से।

1

ऊपर की ही तरह इस सवाल का जवाब है, लेकिन और अधिक बुनियादी कोड:

from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
from matplotlib.patches import Polygon 

map = Basemap(projection='cyl') 

map.drawmapboundary(fill_color='aqua') 
map.fillcontinents(color='coral',lake_color='aqua') 
map.drawcoastlines() 

x1,y1 = map(-25,-25) 
x2,y2 = map(-25,25) 
x3,y3 = map(25,25) 
x4,y4 = map(25,-25) 
poly = Polygon([(x1,y1),(x2,y2),(x3,y3),(x4,y4)],facecolor='red',edgecolor='green',linewidth=3) 
plt.gca().add_patch(poly) 

plt.show()