前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matplotlib的朋友Basemap

Matplotlib的朋友Basemap

作者头像
润森
发布2019-10-30 14:48:11
1.9K0
发布2019-10-30 14:48:11
举报
文章被收录于专栏:毛利学Python毛利学Python

学习一时爽,一直学习一直爽

Hello,大家好,我是 もうり,一个从无到有的技术+语言小白。

最近一直回顾

本文于4月编写

https://blog.csdn.net/weixin_44510615/article/details/90732373 https://blog.csdn.net/weixin_44510615/article/details/90732196

basemap 是一个基于matplotlib的画世界地图的库

内容来源官网:https://matplotlib.org/basemap/

地球科学家,特别是海洋学家和气象学家的需求。Jeff Whitaker最初写了Basemap来帮助他的研究(气候和天气预报),因为当时 CDAT是python中用于绘制地图投影数据的唯一其他工具。多年来,随着其他学科(如生物学,地质学和地球物理学)的科学家们要求并提供新功能,Basemap的功能也得到了发展。

安装

https://www.lfd.uci.edu/~gohlke/pythonlibs/ 去这里下

河流

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

  • drawcoastlines():画海岸线。
  • fillcontinents():为大陆的内部着色(通过填充海岸线多边形)。
  • drawcountries():画出国界。
  • drawstates():在北美绘制州界。
  • drawrivers():画河流。
  • drawlsmask():绘制高分辨率陆海掩模作为图像,指定陆地和海洋颜色。陆海掩模来自GSHHS海岸线数据,有几种海岸线选择和像素大小可供选择。
  • bluemarble():绘制美国宇航局 蓝色大理石 图像作为地图背景。
  • shadedrelief():绘制 阴影浮雕图像作为地图背景。
  • etopo():绘制一个 etopo 浮雕图像作为地图背景。
  • warpimage():使用abitrary图像作为地图背景。图像必须是全局的,从国际日期线向东和南极向北以纬度/经度坐标覆盖世界。
开搞
代码语言:javascript
复制
# 绘制海岸线,填补海洋和陆地区域
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
# setup Lambert Conformal basemap.
m = Basemap(width=12000000,height=9000000,projection='lcc',
            resolution='c',lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
# draw coastlines.
m.drawcoastlines()
# draw a boundary around the map, fill the background.
# this background will end up being the ocean color, since
# the continents will be drawn on top.
m.drawmapboundary(fill_color='aqua')
# fill continents, set lake color same as ocean color.
m.fillcontinents(color='coral',lake_color='aqua')
plt.show()

在这里插入图片描述

太空看到的样子

代码语言:javascript
复制
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
# setup Lambert Conformal basemap.
# set resolution=None to skip processing of boundary datasets.
m = Basemap(width=12000000,height=9000000,projection='lcc',
            resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
m.bluemarble()
plt.show()

在这里插入图片描述

世界地图的样子

代码语言:javascript
复制
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
# setup Lambert Conformal basemap.
# set resolution=None to skip processing of boundary datasets.
m = Basemap(width=12000000,height=9000000,projection='lcc',
            resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
m.shadedrelief()
plt.show()

在这里插入图片描述

看下地球

代码语言:javascript
复制
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# lon_0 is central longitude of projection.
# resolution = 'c' means use crude resolution coastlines.
m = Basemap(projection='robin',lon_0=0,resolution='c')
m.drawcoastlines()
m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-90.,120.,30.))
m.drawmeridians(np.arange(0.,360.,60.))
m.drawmapboundary(fill_color='aqua')
plt.title("Robinson Projection")
plt.show()

在这里插入图片描述

代码语言:javascript
复制
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# lon_0 is the central longitude of the projection.
# resolution = 'l' means use low resolution coastlines.
# optional parameter 'satellite_height' may be used to
# specify height of orbit above earth (default 35,786 km).
m = Basemap(projection='geos',lon_0=-105,resolution='l')
m.drawcoastlines()
m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-90.,120.,30.))
m.drawmeridians(np.arange(0.,420.,60.))
m.drawmapboundary(fill_color='aqua')
plt.title("Full Disk Geostationary Projection")
plt.show()

在这里插入图片描述

代码语言:javascript
复制
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# llcrnrlat,llcrnrlon,urcrnrlat,urcrnrlon
# are the lat/lon values of the lower left and upper right corners
# of the map.
# resolution = 'c' means use crude resolution coastlines.
m = Basemap(projection='gall',llcrnrlat=-90,urcrnrlat=90,\
            llcrnrlon=-180,urcrnrlon=180,resolution='c')
m.drawcoastlines()
m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-90.,91.,30.))
m.drawmeridians(np.arange(-180.,181.,60.))
m.drawmapboundary(fill_color='aqua')
plt.title("Gall Stereographic Projection")
plt.show()

在这里插入图片描述

代码语言:javascript
复制
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
plt.figure(figsize=(8, 8))
m = Basemap(projection='ortho', resolution=None, lat_0=50, lon_0=-100)
m.bluemarble(scale=0.5)

在这里插入图片描述

使用basemap是为了如何绘制数据,而不是简单看下图片

以下是一些可用的绘图功能

物理边界和水体

  • DrawCoastlines():绘制大陆海岸线
  • drawlsmask():在陆地和海洋之间绘制一个遮罩,用于一个或另一个上的投影图像。
  • drawMapBoundary():绘制地图边界,包括海洋的填充颜色。
  • draw rivers():在地图上绘制河流
  • fillContinents():用给定颜色填充大陆;可以选择用另一种颜色填充湖泊

政治界限

  • drawCountries():绘制国家边界
  • drawStates():绘制我们的状态边界
  • drawCountries():绘制美国县边界

地图功能

  • drawGreatCircle():在两点之间画一个大圆
  • drawParallels():绘制等纬度线
  • drawMeridians():绘制经度不变的线
  • draw map scale():在地图上绘制线性比例

全球图像

  • blue marble():将NASA的蓝色大理石图像投影到地图上
  • shaddedRelief():将着色的浮雕图像投影到地图上
  • etopo():在地图上绘制etopo浮雕图像
  • warpImage():将用户提供的图像投影到地图上

对于基于边界的要素,在创建基础地图图像时必须设置所需的分辨率。 “basemap”类的“resolution”参数设置边界的详细程度,如果不使用边界,可以是“c”(粗)、“l”(低)、“i”(中)、“h”(高)、“f”(满)或“none”(无)。

将创建苏格兰美丽的斯凯岛的低分辨率和高分辨率地图

苏格兰位于57.3°N,6.2°W,使用90000×120000公里的地图

代码语言:javascript
复制
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
fig, ax = plt.subplots(1, 2, figsize=(12, 8))

for i, res in enumerate(['l', 'h']):
    m = Basemap(projection='gnom', lat_0=57.3, lon_0=-6.2,
                width=90000, height=120000, resolution=res, ax=ax[i])
    m.fillcontinents(color="#FFDDCC", lake_color='#DDEEFF')
    m.drawmapboundary(fill_color="#DDEEFF")
    m.drawcoastlines()
    ax[i].set_title("resolution='{0}'".format(res))

在这里插入图片描述 在地图上绘制数据

使用“basemap”实例将纬度和经度坐标投影到“x,y”坐标

其中一些特定于地图的方法是:

  • Contour()/Contourf():绘制轮廓线或填充轮廓
  • imshow():绘制图像
  • pcolor()/pcolormesh():为不规则/规则网格绘制伪彩色图
  • plot():绘制线条和/或标记。
  • scatter():使用标记绘制点。
  • quiver():绘制向量。
  • barbs():绘制风倒钩。
  • drawGreatCircle():画一个大圆。

有关这些函数(包括几个示例图)的详细信息,请参阅[在线文档](http://matplotlib.org/basemap/)。

读入数据来画图

代码语言:javascript
复制
import pandas as pd
cities = pd.read_csv('data/california_cities.csv')
cities.columns


Index(['Unnamed: 0', 'city', 'latd', 'longd', 'elevation_m', 'elevation_ft',
       'population_total', 'area_total_sq_mi', 'area_land_sq_mi',
       'area_water_sq_mi', 'area_total_km2', 'area_land_km2', 'area_water_km2',
       'area_water_percent'],
      dtype='object')
代码语言:javascript
复制
cities.head()

在这里插入图片描述 绘制加利福尼亚城市位置、大小和人口的信息。

代码语言:javascript
复制
# Extract the data we're interested in
lat = cities['latd'].values
lon = cities['longd'].values
population = cities['population_total'].values
area = cities['area_total_km2'].values

设置地图投影,分散数据,然后创建颜色条和图例

代码语言:javascript
复制
# 1. Draw the map background
fig = plt.figure(figsize=(8, 8))
m = Basemap(projection='lcc', resolution='h', 
            lat_0=37.5, lon_0=-119,
            width=1E6, height=1.2E6)
m.shadedrelief()
m.drawcoastlines(color='gray')
m.drawcountries(color='gray')
m.drawstates(color='gray')

# 2. scatter city data, with color reflecting population
# and size reflecting area
m.scatter(lon, lat, latlon=True,
          c=np.log10(population), s=area,
          cmap='Reds', alpha=0.5)

# 3. create colorbar and legend
plt.colorbar(label=r'$\log_{10}({\rm population})$')
plt.clim(3, 7)

# make legend with dummy points
for a in [100, 300, 500]:
    plt.scatter([], [], c='k', alpha=0.5, s=a,
                label=str(a) + ' km$^2$')
plt.legend(scatterpoints=1, frameon=False,
           labelspacing=1, loc='lower left')

在这里插入图片描述

还有很多牛逼的东西

https://matplotlib.org/basemap/users/examples.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开搞
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档