神器-可视化分析之Basemap实战详解(二)

cc3a15f45b5dd57a3c7beeb2d54d9b63.png

文 | 潮汐

来源:Python 技术「ID: pythonall」

5fefcbf165851ca9c8405a84d534d51f.png

上一篇文章讲解了Basemap基础知识,今天的文章主要阐述 BaseMap 实战。话不多说,一起来实战吧!

BaseMap 画世界地图

BaseMap 画世界地图,主要方法是画地球海岸线,画国家分界线主要方法是:m.drawcoastlines()

BaseMap 画地球地图详细代码如下:

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np

def drawcoast():
    plt.figure(figsize=(12, 8))
    m = Basemap()   # 创建一个地图
    m.drawcoastlines()   # 画海岸线
    plt.show()   # 显示图像
if __name__ == '__main__':
    drawcoast()

运行结果图如下:

c18fdb3cf13bf6e5d95f806f54c1df65.png

用 BaseMap 画中国地图

使用 BaseMap 画中国地图时需要增加中国的经纬度信息,详细方法如下:

# 画中国地图
def draw_china():
    plt.figure(figsize=(10, 6))
    m = Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45,
                lon_0=100)
    m.drawcountries(linewidth=1.5)
    m.drawcoastlines()
    plt.show()

中国地图显示如下:

6963eda4b655eac2deb54bb8bfad7559.png

用 BaseMap 绘制地球

def draw_basic():
    map = Basemap(projection='ortho', lat_0=0, lon_0=0)
    map.drawmapboundary(fill_color='aqua')
    map.fillcontinents(color='gray',lake_color='aqua')
    map.drawcoastlines()
    plt.show()

显示图片如下:

54022d7b5c5d5c7848fff64f0da857c5.png

用 BaseMap 绘制人口分布图

根据添加的各个城市的主要人口分布后绘制出城市人口分布地图,详细方法和代码如下:

def drawearth():
    names = []
    pops = []
    lats = []
    lons = []
    countries = []
    file = open("data/main_city", encoding='utf-8').readlines()
    for line in file:
        info = line.split()
        names.append(info[0])
        pops.append(float(info[1]))
        lat = float(info[2][:-1])
        if info[2][-1] == 'S': lat = -lat
        lats.append(lat)
        lon = float(info[3][:-1])
        if info[3][-1] == 'W': lon = -lon + 360.0
        lons.append(lon)
        country = info[4]
        countries.append(country)
    # set up map projection with
    # use low resolution coastlines.
    map = Basemap(projection='ortho', lat_0=35, lon_0=120, resolution='l')
    # draw coastlines, country boundaries, fill continents.
    map.drawcoastlines(linewidth=0.25)
    map.drawcountries(linewidth=0.25)
    # draw the edge of the map projection region (the projection limb)
    map.drawmapboundary(fill_color='#689CD2')
    # draw lat/lon grid lines every 30 degrees.
    map.drawmeridians(np.arange(0, 360, 30))
    map.drawparallels(np.arange(-90, 90, 30))
    # Fill continent wit a different color
    map.fillcontinents(color='#BF9E30', lake_color='#689CD2', zorder=0)
    # compute native map projection coordinates of lat/lon grid.
    x, y = map(lons, lats)
    max_pop = max(pops)
    # Plot each city in a loop.
    # Set some parameters
    size_factor = 80.0
    y_offset = 15.0
    rotation = 30
    for i, j, k, name in zip(x, y, pops, names):
        size = size_factor * k / max_pop
        cs = map.scatter(i, j, s=size, marker='o', color='#FF5600')
        plt.text(i, j + y_offset, name, rotation=rotation, fontsize=10)

    plt.title('earth')
    plt.show()

if __name__ == '__main__':
    drawearth()

绘制出的地球图片如下:

c00adb62ac055b37e6384852cd7c6fc2.png

画投影地球

最后来画一个有投影的地球,详细代码如下:

def draw_earth1():
    import matplotlib.pyplot as plt
    from mpl_toolkits.basemap import Basemap
    plt.figure(figsize=(8, 8))
    # 正射投影,投影原点设在了上海周边
    m = Basemap(projection='ortho', resolution=None, lat_0=30, lon_0=120)
    # 图像原始分辨率是5400*2700,设置scale = 0.5以后分辨率为2700*1350,如此作图
    # 迅速不少也不那么占用内存了
    m.bluemarble(scale=0.5)
    plt.show()

if __name__ == '__main__':
    draw_earth1()

绘画结果图如下:

eff7c041e34c7b46a04ccd6ee1a7edc6.png

总结

今天的文章就到这里啦,希望今天的文章对大家有帮助!

PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!

老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

a4352c1e10e3fe08230a7db86680ab20.gif

代码获取方式

识别文末二维码,回复:潮汐

dfc4b6871e39fde5c9710557f0188285.png

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值