Basemap模块

basemap是干什么的
  • Basemap是Matplotlib的一个子包,负责地图绘制。在数据可视化过程中,我们常需要将数据在地图上画出来。
  • 比如说我们在地图上画出城市人口,飞机航线,军事基地,矿藏分布等等。这样的地理绘图有助于读者理解空间相关的信息。
安装

不能直接使用pip安装

  1. 下载basemap和pyproj(与自己的python版本和电脑版本对应)
    地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/

  2. 在命令行模式下使用pip/pip3安装

  • 先执行pip3 install pyproj路径.whl

  • 再执行 pip3 install basemap路径.whl

开始画图
  • 画一个世界地图
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
plt.figure(figsize=(10, 6))
m = Basemap()   # 创建一个地图
m.drawcoastlines()   # 画海岸线
plt.show()   # 显示图像

  • 显示出国家分界线(只需加一行代码)
m.drawcounties(linewidth=1)     # 画国家分界线
  • 画中国地图
    在建立地图时添加中国的经纬度参数
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
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 = Basemap(llcrnrlon=73, llcrnrlat=18, urcrnrlon=135, urcrnrlat=53)
m.drawcountries(linewidth=1.5)
m.drawcoastlines()
plt.show()

  • 为中国地图添加省份

下载中国大陆和台湾省的行政区域的shape文件,下载后解压
地址:https://gadm.org/download_country_v3.html

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemapplt.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()
China = "E:\\新建文件夹\\Basemap_china_shape"
# 加入中国大陆的省界
m.readshapefile(China + '\\gadm36_CHN_shp\\gadm36_CHN_1', 'states', drawbounds=True)
# 加入台湾的省界
m.readshapefile(China + '\\gadm36_TWN_shp\\gadm36_TWN_1', 'taiwan', drawbounds=True)
plt.show()

  • 在地图上加上经纬度
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as npplt.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()
China = "E:\\新建文件夹\\Basemap_china_shape"
# 加入中国大陆的省界
m.readshapefile(China + '\\gadm36_CHN_shp\\gadm36_CHN_1', 'states', drawbounds=True)
# 加入台湾的省界
m.readshapefile(China + '\\gadm36_TWN_shp\\gadm36_TWN_1', 'taiwan', drawbounds=True)
# 在地图上加上经纬度
parallels = np.linspace(3, 55, 5)   # 生成3到55之间的5个等差数列
m.drawparallels(parallels, labels=[True, False, False, False])
meridians = np.linspace(70, 140, 5)
m.drawmeridians(meridians, labels=[False, False, False, True])
plt.show()

通过经纬度在地图上标出点
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as npplt.figure(figsize=(10, 6))
m = Basemap()  # 实例化一个map
m.drawcoastlines()  # 画海岸线
m.drawmapboundary(fill_color='white')
m.fillcontinents(color='white', lake_color='white')  # 画大洲,颜色填充为白色parallels = np.arange(-90., 90., 10.)  # 这两行画纬度,范围为[-90,90]间隔为10
m.drawparallels(parallels, labels=[False, True, True, False])
meridians = np.arange(-180., 180., 20.)  # 这两行画经度,范围为[-180,180]间隔为10
m.drawmeridians(meridians, labels=[True, False, False, True])
lon = [-140, 0, -20, 160, -100]  # 西负东正
lat = [60, 0, -30, 40, -30]      # 北正南负
lon, lat = m(lon, lat)  # lon, lat为给定的经纬度,可以使单个的,也可以是列表
m.scatter(lon, lat, s=100, c="red")  # 标注出所在的点,s为点的大小,还可以选择点的性状和颜色等属性
plt.show()

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号# 读取数据
names = []
pops = []
lats = []
lons = []
countries = []
file = open("test_file", 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 = -latlats.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)plt.figure(figsize=(10, 6))
# projection参数规定了投影方法。改变投影方法,绘图结果也将非常不同。
map = Basemap(projection='ortho', lat_0=35, lon_0=120, resolution='l')   # 实例化一个map
# 画海岸线
map.drawcoastlines(linewidth=0.25)
# 画国家分界线
map.drawcountries(linewidth=0.25)
# 绘制地图投影区域的边缘(投影肢体)
map.drawmapboundary(fill_color='#689CD2')
# 每隔30度绘制纬度/经度网格线.
map.drawmeridians(np.arange(0, 360, 30))
map.drawparallels(np.arange(-90, 90, 30))
# 用不同的颜色填满大陆
map.fillcontinents(color='#BF9E30', lake_color='#689CD2', zorder=0)
# 计算lat/lon网格的自然地图投影坐标.
# 我们想要把经纬度对应图像的像素点,需要转换
x, y = map(lons, lats)
max_pop = max(pops)
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_popcs = map.scatter(i, j, s=size, marker='o', color='#FF5600')plt.text(i, j+y_offset, name, rotation=rotation, fontsize=10)plt.title('亚洲主要城市与人口')
plt.show()


Basemap应用实例
  • 蓝色弹珠
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)

更多有趣的内容阅读https://www.jianshu.com/p/e36d1b4c455a

数据分析之basemap模块相关推荐

  1. 【数据分析】Python-NumPy模块的使用

    Python\数据的存储和处理\NumPy 1. NumPy 模块-概念 2. NumPy 模块-数组 2.1 数组-含义 2.2 数组-创建 2.2.1 数组-利用np.array()函数创建多维数 ...

  2. 网站流量日志数据分析系统(模块开发----数据仓库设计)

    1. 维度建模基本概念 维度建模(dimensional modeling)是专门用于分析型数据库.数据仓库.数据集市建模的方法.数据集市可以理解为是一种"小型数据仓库". 维度表 ...

  3. arcgis的numpy模块_数据分析之numpy模块

    Numpy Numpy是Numerical Python的简写,主要可以用来做Python数值计算.它提供了多种数据结构.算法以及大部分涉及Python数值计算所需的接口. 快速.高效的多维数组对象n ...

  4. 2 数据分析之Numpy模块(1)

    Numpy Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包.它是我们课程所介绍的其他高级工具的构建基础. 其部分功能如下: ndarray, 一个具有复杂广播能 ...

  5. python 数据分析模块_Python数据分析之Numpy模块

    import Numpy as np ar=np.array([[1,3,5,7,9],[2,4,6,8,10]]) # Numpy.array中必须是数组 print(ar,type(ar)) # ...

  6. Python之数据分析(random模块的正确用法)

    文章目录 一.二项分布:numpy.random.binomial(n, p, size) 二.超几何分布:numpy.random.hypergeometric(ngood, nbad, nsamp ...

  7. Python数据分析: matplotlib模块学习之绘制常用统计图

    matplotlib绘制常用的统计图 常用的统计图有散点图, 折线图, 条形图和直方图, 在前面我们已经讲解了折线图的基本实现,但其实绘制其他图形和折线图比起来也是相差不多的, 下面就来逐个讲解他们的 ...

  8. 数据分析:Numpy模块(一)

    Numpy数值计算基础 一.创建数组对象 1.数组属性: 属性 说明 ndim 返回int,表示数组的维度,即数组的秩 shape 返回 tuple.表示数组的尺寸,对于 n 行 m 列的矩阵,形状为 ...

  9. 数据分析:numpy模块(二)

    Numpy创建矩阵 矩阵的创建 1.使用 mat 函数创建矩阵: matr1 = np.mat("1 2 3; 4 5 6; 7 8 9") 2.使用 matrix 函数创建矩阵: ...

  10. 数据分析和数据挖掘相关模块

    numpy 一般使用numpy+mkl pandas:数据分析和处理模块,能为复杂情形下的数据提供坚实的基础分析功能 scipy:支持数值计算,支持矩阵运算,提供高等数学处理:积分.傅立叶变换.微分方 ...

最新文章

  1. 防止熊猫烧香的微软补丁
  2. 技巧 | Java 8 Stream 中异常处理的4种方式
  3. Qt+VS2013编译报错:'cl' 不是内部或外部命令,也不是可运行的程序
  4. spark在服务器运行示例_创建示例HTTPS服务器以获取乐趣和收益
  5. linux修改容器内的mysql端口_Linux系统下修改phpstudy集成环境中的MySQL端口号的步骤...
  6. .NET单元测试-多线程
  7. Python 的解释器
  8. 2020行政区划重新划分_邯郸市的20年,2000年-2020年区划对比,你觉得成绩如何?...
  9. 最新Vue2.0+组件开源项目库集合
  10. 进程通信方式总结与盘点
  11. 关于Handling Unit SAP包装
  12. 室内装修app开发,尽享绿色生活
  13. 2012-2-15雨
  14. c# WPF中System.Windows.Interactivity的使用
  15. 下一代LMS的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
  17. SAS可以用来做什么?
  18. 国产CPU乱战遭遇生态壁垒:英特尔工艺领先龙芯两代
  19. 微信公众号开发——项目搭建
  20. 1035: 蛇形填数

热门文章

  1. Gamma 分布函数可加性证明
  2. python字符串输入小圆点_第6章 多序列比对
  3. java 自定义列表_自定义列表标签
  4. 程序员眼中的中国传统文化_王阳明《传习录》2
  5. java使用poi制作的ppt被损坏_poi操作ppt创建表格,结果却是这样?
  6. 阿里云域名转入/转出操作教程
  7. python画红蓝相间同心圆_Python 实现的、带GUI界面的词云生成器
  8. javascript中正则匹配多个条件, 常用正则匹配, 正则详解
  9. mysql rm-rf_rm-rf误操作的恢复过程
  10. robotstudio工作站建立