2016-03-16 22 views
6

İstediğim haritayı almaya yakınım. Matplotlib'in Basemap'ı harika, ama yakınlaştırdığımda kıyı çizgileri çok kaba. Doğal Dünya şekil dosyalarını okuyabiliyorum ve bunları çok daha iyi çizebiliyorum… ama çokgenleri doldurmaya çalıştığımda, sanırım tüm bunları tedavi ediyor. Tek bir poligona ait olan noktalar. Çokgenler arasında nasıl yineleyebilir ve haritayı nasıl doğru gösterebilirim?Matplotlib Basemap'ta çokgenler olarak Doğal Dünya şekillerini panklonlamak için Python'u kullanma

Şimdiden teşekkürler!

import numpy as np 
from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
from matplotlib.patches import Polygon 
from matplotlib.collections import PatchCollection 
%matplotlib inline 

landColor, coastColor, oceanColor, popColor, countyColor = '#eedd99','#93ccfa','#93ccfa','#ffee99','#aa9955' 

fig = plt.figure() 
ax = fig.add_subplot(111) 
s = 1900000 
m = Basemap(projection='ortho',lon_0=-86.5,lat_0=30.3,resolution='l',llcrnrx=-s,llcrnry=-s,urcrnrx=s,urcrnry=s) 
m.drawmapboundary(fill_color=oceanColor) # fill in the ocean 

# generic function for reading polygons from file and plotting them on the map. This works with Natural Earth shapes. 
def drawShapesFromFile(filename,facecolor,edgecolor,m): 
    m.readshapefile(filename, 'temp', drawbounds = False) 
    patches = [] 
    for info, shape in zip(m.temp_info, m.temp): patches.append(Polygon(np.array(shape), True)) 
    ax.add_collection(PatchCollection(patches, facecolor=facecolor, edgecolor=edgecolor, linewidths=1)) 

# read the higher resolution Natural Earth coastline (land polygons) shapefile and display it as a series of polygons 
drawShapesFromFile('\\Conda\\notebooks\\shapes\\ne_10m_coastline',landColor,coastColor,m) 
drawShapesFromFile('\\Conda\\notebooks\\shapes\\ne_10m_urban_areas',popColor,'none',m) 

m.drawcounties(color=countyColor) 
plt.gcf().set_size_inches(10,10) 
istediği gibi

my current map

+1

: Yapmam gereken tek şey böyle ne_10m_land için ne_10m_coastline değiştirmek oldu. Yanlış giriş verilerini kullanıyordum. Kara veri kümesi yerine sahil şeridi veri kümesini kullandım. Hata. Umarım yukarıdaki kod herkese yararlı olacaktır. –

+0

Kendi fikrinizi cevap olarak göndermelisiniz! – tmthydvnprt

cevap

1

, burada güncellenen kod ve elde edilen haritası bulunuyor:

İşte kod. Ben bunu anladım

import numpy as np 
from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
from matplotlib.patches import Polygon 
from matplotlib.collections import PatchCollection 
%matplotlib inline 

landColor, coastColor, oceanColor, popColor, countyColor = '#eedd99','#93ccfa','#93ccfa','#ffee99','#aa9955' 

fig = plt.figure() 
ax = fig.add_subplot(111) 
s = 1900000 
m = Basemap(projection='ortho',lon_0=-86.5,lat_0=30.3,resolution='l',llcrnrx=-s,llcrnry=-s,urcrnrx=s,urcrnry=s) 
m.drawmapboundary(fill_color=oceanColor) # fill in the ocean 

# generic function for reading polygons from file and plotting them on the map. This works with Natural Earth shapes. 
def drawShapesFromFile(filename,facecolor,edgecolor,m): 
    m.readshapefile(filename, 'temp', drawbounds = False) 
    patches = [] 
    for info, shape in zip(m.temp_info, m.temp): patches.append(Polygon(np.array(shape), True)) 
    ax.add_collection(PatchCollection(patches, facecolor=facecolor, edgecolor=edgecolor, linewidths=1)) 

# read the higher resolution Natural Earth coastline (land polygons) shapefile and display it as a series of polygons 
drawShapesFromFile('\\Conda\\notebooks\\shapes\\ne_10m_land',landColor,coastColor,m) 
drawShapesFromFile('\\Conda\\notebooks\\shapes\\ne_10m_urban_areas',popColor,'none',m) 

m.drawcounties(color=countyColor) 
plt.gcf().set_size_inches(10,10) 

enter image description here