使用matplotlib-basemap将一个多边形添加到绘图中

时间:2013-10-18 07:55:25

标签: python matplotlib matplotlib-basemap

我有以下代码:

from mpl_toolkits.basemap import Basemap
map = Basemap(projection='merc', lat_0=50, lon_0=4,
    resolution = 'l', area_thresh = 0.1,
    llcrnrlon=4, llcrnrlat=50,
    urcrnrlon=40, urcrnrlat=60)

map.drawcoastlines(linewidth=0.15)
map.drawcountries(linewidth=0.15)
map.fillcontinents(color='brown',lake_color='white')
map.drawmapboundary(fill_color='white')

enter image description here

在这张地图的顶部,我想显示一个只包含一个多边形的shapefile。多边形定义了一个封闭区域。我已经找到了关于如何手动添加多边形或从shapefile中绘制多个多边形的不同教程,但我无法为我的情况做这些。 shapefile属性表仅由两个字段组成:“ c ”和“区域”。

现在我已经到了这个

import shapefile

s = shapefile.Reader(filepath,'c',drawbounds=False)
shapes = s.shapes()
records = s.records()
for record, shape in zip(records,shapes):
    lons,lats = zip(*shape.points)
    data = np.array(map(lons, lats)).T
x, y =map(lons,lats) 

1 个答案:

答案 0 :(得分:1)

有同样的问题,但它很简单,你从来​​没有想过用网上的许多教程和模块以及类似的问题来做这件事:

map.readshapefile('luthuania', 'any_name_you_like', drawbounds=True)

所以你的例子:

from mpl_toolkits.basemap import Basemap
map = Basemap(projection='merc', lat_0=50, lon_0=4,
    resolution = 'l', area_thresh = 0.1,
    llcrnrlon=4, llcrnrlat=50,
    urcrnrlon=40, urcrnrlat=60)

map.readshapefile('luthuania', 'any_name_you_like', drawbounds=True, linewidth=2, color='b')

map.drawcoastlines(linewidth=0.15)
map.drawcountries(linewidth=0.15)
map.fillcontinents(color='brown',lake_color='white')
map.drawmapboundary(fill_color='white')

哪个给出了

lithuania

顺便说一句,模块shapefile被Basemap使用:参见C:\ Python33 \ Lib \ site-packages \ mpl_toolkits \ basemap \ shapefile.py