使用Python在Matplotlib Basemap中绘制自然地球形状的多边形

8
我接近获得我想要的地图。Matplotlib的Basemap很棒,但是当我放大时海岸线太粗糙了。我可以读取自然地球形状文件并绘制它们,这样会好得多...但是当我尝试填充多边形时,我认为它将所有点视为属于一个多边形。如何遍历多边形并正确显示地图?感谢您的帮助!以下是代码:
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
我找到问题所在了。我使用了错误的输入数据,使用了海岸线数据集而不是陆地数据集。糟糕。希望上面的代码对大家有用。 - Noise in the street
你应该将自己的修复方案发布为答案! - tmthydvnprt
1个回答

2

按照要求,这是更新后的代码和生成的地图。我所做的只是将 ne_10m_coastline 改为 ne_10m_land ,像这样:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接