2016-03-16 26 views
6

私は自分が望むマップを手に入れようとしています。 MatplotlibのBasemapは素晴らしいですが、ズームインすると海岸線が粗すぎます。Natural Earthのシェイプファイルを読み込んでプロットすることができますが、これははるかに優れています...しかし、ポリゴンを塗りつぶしてみると、ポイントは1つのポリゴンに属するものとして扱われます。ポリゴンを繰り返し処理し、マップを正しく表示するにはどうすればよいですか?Pythonを使用してMatplotlib BasemapのNatural Earthシェイプをポリゴンとしてプロットする

ありがとうございます!ここで

コードです:要求されたよう

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) 

my current map

+1

:私がしなければならなかったすべては、このようなne_10m_landne_10m_coastlineを変更しました。私は誤った入力データを使用していました。土地データセットの代わりに海岸線データセットを使用しました。おっとっと。うまくいけば、上記のコードは皆にとって役に立ちます。 –

+0

あなた自身の修正を回答として投稿する必要があります! – tmthydvnprt

答えて

1

、ここで更新されたコードと結果のマップです。私はそれを考え出した

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

関連する問題