>>> from env_helper import info; info()
页面更新时间: 2022-05-27 12:18:23
运行环境:
    Linux发行版本: Debian GNU/Linux bookworm/sid
    操作系统内核: Linux-5.16.18-200.fc35.x86_64-x86_64-with-glibc2.33
    Python版本: 3.10.4

17.3. 地图界线与地图背景的绘制

Basemap包括GSSH海岸线数据集,以及来自GMT的河流、州和国家边界的数据集。这些数据集可用于在地图上以几种不同的分辨率绘制海岸线,河流和政治边界。相关的底图方法是:

  • drawcoastlines():绘制海岸线。

  • fillcontinents():为大陆内部着色(通过填充海岸线多边形)。不幸的是,fillcontinents方法并不总是做正确的。因为Matplotlib总是尝试填充多边形的内部。在某些情况下,海岸线多边形的内部可以是模糊的,并且有时需要填充外部而不是内部。在这些情况下,建议的解决方法是使用drawlsmask()方法覆盖具有为陆地和水域指定的不同颜色的图像。

  • drawcountries():绘制国家边界。

  • drawstates():绘制北美的州界。

  • drawrivers():绘制河流。

首先导入库,建立好运行环境:

>>> %matplotlib inline
>>> import warnings
>>> warnings.filterwarnings('ignore')
>>>
>>> from mpl_toolkits.basemap import Basemap
>>> import matplotlib.pyplot as plt

17.3.1. 绘制界线

绘制海岸线。

drawcoastlines(linewidth=1.0, linestyle=’solid’, color=’k’, antialiased=1, ax=None, zorder=None)
  • 线宽集。线宽以像素为单位。

  • linestyle设置线型。默认情况下是固体,但可以是虚线,或任何matplotlib选项。

  • 颜色默认为k(black)。遵循matplotlib约定。

  • 抗锯齿默认为true

  • zorder设置图层位置。默认情况下,顺序由Basemap设置。

>>> map = Basemap()
>>> map.drawcoastlines()
>>> plt.show()
_images/sec3_background_6_0.png

drawcounties 从库包括的图层绘制国家边界。

drawcounties(linewidth=0.1, linestyle=’solid’, color=’k’, antialiased=1, facecolor=’none’, ax=None, zorder=None, drawbounds=False)
  • 线宽集。线宽以像素为单位。

  • linestyle设置线型。默认情况下是固体,但可以是虚线,或任何matplotlib其他选项。

  • 颜色默认为k(black)。遵循matplotlib约定。

  • 抗锯齿默认为true。

  • zorder设置图层位置。默认情况下,顺序由Basemap设置。

注:facecolor参数,它应该是县的颜色,但在一些Basemap版本不能运行。

注意:

  • 分辨率是固定的,不依赖于传递给类构造函数的分辨率。

  • 海岸线是另一个功能,而乡镇海岸线不被认为是海岸线,因此有必要把这个方法和其他的方法结合起来以获得好的地图。

drawcountries() 从库中包含的图层绘制国家/地区边界。

>>> map = Basemap(projection='ortho', lat_0=0, lon_0=0)
>>> map.drawmapboundary(fill_color='aqua')
>>> map.fillcontinents(color='coral',lake_color='aqua')
>>> map.drawcountries()
>>> plt.show()
_images/sec3_background_9_0.png

Drawlsmask是绘制湖泊,陆地和海洋的方法。尽量避免使用fillcontinents和drawmapboundary方法。此外,Drawlsmask可以将数据源更改为自定义点阵列。 与其他方法的不同之处在于,在此方法中无法设置zorder。

drawmapboundary 在地图上绘制地球边界,可选择填充。

drawmeridians() 在地图上绘制经线;drawparallels() 在地图上绘制纬线。

>>> map = Basemap()
>>> map.drawcoastlines()
>>> map.drawmeridians(range(0, 360, 20))
>>> map.drawparallels(range(-180, 180, 20),  linewidth=2, dashes=[4, 2], labels=[1,0,0,1], color='r', zorder=0)
>>> plt.show()
_images/sec3_background_13_0.png

drawrivers() 从库中包含的图层绘制河流。

17.3.2. 绘制背景

绘制地图并不只包括绘制海岸线和政治边界,也包括地图背景的绘制。Basemap提供了绘制地图背景的几个方法:

  • drawlsmask():绘制高分辨率海陆掩码作为图像,指定土地和海洋颜色。陆地海面掩模源自GSHHS海岸线数据,并且有多个海岸线选项和像素大小可供选择。

  • bluemarble():绘制一张NASA蓝色大理石图像作为地图背景。

  • shadedrelief():绘制一个阴影浮雕图像作为地图背景。

  • etopo():绘制etopo浮雕图像作为地图背景。

  • warpimage():使用abitrary图像作为地图背景。图像必须是全球的,从国际数据线向东,南极向北,以纬度/经度坐标覆盖世界。

bluemarble 在地图上绘制bluemarble图像。

  • 该比例对于降低原始图像分辨率以加速处理是有用的。将图像的大小除以4值为0.5。

  • 图像的最终投影被扭曲,所以所有投影方法均正常工作。

>>> map = Basemap(llcrnrlon=-10.5,llcrnrlat=33,urcrnrlon=10.,urcrnrlat=46.,
>>>              resolution='i', projection='cass', lat_0 = 39.5, lon_0 = 0.)
>>> map.bluemarble()
>>> map.drawcoastlines()
>>> plt.show()
_images/sec3_background_16_0.png

etopo() 从NOAA取得etopo来绘制一个浮雕图像。图像具有1英寸的弧度分辨率,因此在放大时,结果相当差。

  • 该比例对于降低原始图像分辨率以加速处理是有用的。值为0.5将图像的大小除以4

  • 图像被扭曲到最终投影,所以所有projectinos使用此方法正常工作

>>> map = Basemap(llcrnrlon=-10.5,llcrnrlat=33,urcrnrlon=10.,urcrnrlat=46.,
>>>              resolution='i', projection='cass', lat_0 = 39.5, lon_0 = 0.)
>>> map.etopo()
>>> map.drawcoastlines()
>>> plt.show()
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
_images/sec3_background_18_1.png

fillcontinents() 用大陆绘制填充多边形。

>>> map = Basemap(projection='ortho', lat_0=0, lon_0=0)

Fill the globe with a blue color,Fill the continents with the land color。

>>> map.drawmapboundary(fill_color='aqua')
>>> map.fillcontinents(color='coral',lake_color='aqua')
>>> map.drawcoastlines()
>>> plt.show()
_images/sec3_background_22_0.png