Basemap可视化地理数据——Note_12

一、先导入一个地球

lat_0表示地图中心的纬度,lon_0表示经度
%matplotlib inline
import os
# 下面这行代码是解决在 jupyter notebook 中导入basemap出现KerErrr:"PROJ_LIB"错误的方法。可以网上搜其他方法
os.environ['PROJ_LIB'] = r'D:\Program_Software\Anaconda\pkgs\proj4-5.2.0-ha925a31_1\Library\share'
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可视化地理数据——Note_12_第1张图片

在地图上添加标签
fig = plt.figure(figsize=(8, 8))
# lat_0, lon_0 控制投影的地图区域,width和height控制地图的大小
m = Basemap(projection='lcc', resolution=None,
           width=5E6, height=5E6,
           lat_0=45, lon_0=100)
m.etopo(scale=0.5, alpha=0.5)

# 地图上的(经纬度)对应图上的(x, y)坐标
x, y = m(116, 47)  # 北京八达岭长城的经纬度
plt.plot(x, y, 'ok', markersize=5)
plt.text(x, y, 'scattle', fontsize=12)

Basemap可视化地理数据——Note_12_第2张图片

二、地图投影:

from itertools import chain
def draw_map(m, scale=0.2):
    # 画地貌晕渲图
    m.shadedrelief(scale=scale)
    # 用字典表示经纬度
    lats = m.drawparallels(np.linspace(-90, 90, 13))
    lons = m.drawmeridians(np.linspace(-180, 180, 13))
    # 字典的键是plt.Line2D
    lat_lines = chain(*(tup[1][0] for tup in lats.items()))
    lon_lines = chain(*(tup[1][0] for tup in lons.items()))
    all_lines = chain(lat_lines, lon_lines)
    
    # 设置线的样式
    for line in all_lines:
        line.set(linestyle='-', alpha=0.3, color='w')
1、圆柱投影
fig = plt.figure(figsize=(8, 6), edgecolor='w')
m = Basemap(projection='cyl', resolution=None,
           llcrnrlat=-90, urcrnrlat=90,      # 设置投影的地图的范围
           llcrnrlon=-180, urcrnrlon=180,)
draw_map(m)

Basemap可视化地理数据——Note_12_第3张图片

2、伪圆柱投影
fig = plt.figure(figsize=(8, 6), edgecolor='w')
m = Basemap(projection='moll', resolution=None, lat_0=0, lon_0=0)
draw_map(m)

Basemap可视化地理数据——Note_12_第4张图片

3、透视投影
fig = plt.figure(figsize=(8, 8))
m = Basemap(projection='ortho', resolution=None, lat_0=50, lon_0=0)
draw_map(m)

Basemap可视化地理数据——Note_12_第5张图片

4、圆锥投影
fig = plt.figure(figsize=(8, 8))
m = Basemap(projection='lcc', resolution=None, lat_0=0, lon_0=50, lat_1=45, lat_2=55,
           width=1.67E7, height=1.2E7)
draw_map(m)

Basemap可视化地理数据——Note_12_第6张图片
还有其他投影类型。参考:https://matplotlib.org/basemap/users/mapsetup.html

你可能感兴趣的:(Matplotlib)