在数据可视化过程中,我们常常需要将数据根据其采集的地理位置在地图上显示出来。比如说我们会想要在地图上画出城市,飞机的航线,乃至于军事基地等等。通常来说,一个地理信息系统都会带有这样的功能。今天我们讨论如何在Python上实现,并且使用免费的工具包。

matplotlib是python上常用的一个数据绘制包。它基于numpy(numpy是python用于数组运算的一个包)。matplotlib具有强大的数据绘制功能,可以轻易地画出各种统计图形,比如散点图,条行图,饼图等等。而Matplot中的basemap则允许我们绘制出地图,并在地图上继续画出数据。

( matplotlib经常与numpy和scipy相配合,用于科学研究。他们是Matlab的强劲对手,这相当可以理解,因为Matlab一套需要好几千块,而python工具则是免费的。)

我们今天的目标是用上述工具画出亚洲主要城市的人口。如下图所示,人口的多少以橙色小圆圈的大小表示:

数据如下(我从Wikipedia上整理的,你可以随意使用),我将数据保存在文件major_city:

Shanghai 23019148  31.23N  121.47E  China
Mumbai   12478447  18.96N  72.82E   India
Karachi  13050000  24.86N  67.01E   Pakistan
Delhi    16314838  28.67N  77.21E   India
Manila   11855975  14.62N  120.97E  Philippines
Seoul    23616000  37.56N  126.99E  Korea(South)
Jakarta  28019545   6.18S  106.83E  Indonesia
Tokyo    35682460  35.67N  139.77E  Japan
Peking   19612368  39.91N  116.39E  China

第一列是城市名,第二列是人口,第三第四列为纬度和经度,最后一列为所在国家。

下面是我的Python代码:

# Written by Vamei, http://www.cnblogs.com/vamei/
# Feel free to use or modify this script.from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np#============================================# read data
names = []
pops  = []
lats  = []
lons  = []
countries = []
for line in file("../data/major_city"):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.0lons.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_popcs = map.scatter(i,j,s=size,marker='o',color='#FF5600')plt.text(i,j+y_offset,name,rotation=rotation,fontsize=10)plt.title('Major Cities in Asia & Population')
plt.show()

程序分为两个部分,第一部分为从文件读取数据并处理,第二部分是用basemap绘图。

map = Basemap(projection='ortho',lat_0=35,lon_0=120,resolution='l')

设置了地图投影的方法。从球形的地球表面投影到平面地图有许多方法可以选择,得到的结果也非常不同。

我们的经纬度通过

x, y = map(lons, lats)

语句转换为图像上的位置,并通过

cs= map.scatter(i,j,s=size,marker='o',color='#FF5600')

画散点图的方法在地图上画出来。

文中的需要的软件包包括:

numpy, matplotlib, mpl_toolkits

你可以google并找到相关文档。

你可以使用pip来下载安装各个包。

在Ubuntu的repository中,你可以找到python-matplotlib包。

参考 Python小技巧

另外,如果是也可以下载epd python。它整合了python以及所有的软件包。(epd python是商业版,但对于学术用户免费。)

作者:Vamei    原文出处链接:http://www.cnblogs.com/vamei

地理信息可视化——Python之matplotlib Basemap简介相关推荐

  1. Python数据可视化 | Python实现Matplotlib系列colorbar的设置

    Python数据可视化 | Python实现Matplotlib系列colorbar的设置 目录 Python数据可视化 | Python实现Matplotlib系列colorbar的设置 color ...

  2. 绘图: matplotlib Basemap简介

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在数据可视化过程中,我们常常需要将数据根据其采集的地理位置在地图上显示出来.比如说 ...

  3. Python应用matplotlib绘图简介

    现在通过numpy和matplotlib在Python上实现科学计算和绘图,而且和matlab极为想象(效率差点,关键是方便简单) 最简单的绘图实例 import matplotlib.pyplot ...

  4. 【数据处理】 python 基于Basemap地理信息可视化

    数据   在某些建模比赛中,经常碰见一些地理信息的数据,它们大多都是车辆在驾驶过程中随时间产生的经纬度序列,并伴随着车辆的各种参数.由于GPS信号并不是一直都很好(如过隧道或偏远地区),无论建模的问题 ...

  5. Python使用 matplotlib的basemap绘图之一--几行代码画世界地图和中国地图

    近来读到几篇Basemap绘图的文章,实践了一下,感觉很有意思,在此分享给各位朋友一起来感受一下它的魅力. Basemap简介 简介 在数据可视化过程中,我们需要将数据在地图上画出来. 比如说我们在地 ...

  6. Py之basemap:python库之basemap的简介、安装、使用方法之详细攻略

    Py之basemap:python库之basemap的简介.安装.使用方法之详细攻略 目录 basemap的简介 basemap的安装 basemap的使用方法 basemap的简介 Basemap ...

  7. python 条形图_Python数据可视化:基于matplotlib绘制「堆积条形图」

    简介 堆积条形图作为条形图的一种,能够显示单个项目与整体之间的关系.不仅可以直观的看出每个系列的值,还能够反映出系列的总和,尤其是当需要看某一项目的总和以及其组成各系列值的比重时,最适合使用堆积条形图 ...

  8. python柱形图代码_Python数据可视化:基于matplotlib绘制「条形图」

    简介 条形图 (bar chart)是用宽度相同条形的高度或长短来表示数据多少的图形,可以横置或纵置.纵置时的条形图也称为 柱形图 (column chart). 绘制条形图 1 import mat ...

  9. python画条形图-Python数据可视化:基于matplotlib绘制「条形图」

    简介 条形图 (bar chart)是用宽度相同条形的高度或长短来表示数据多少的图形,可以横置或纵置.纵置时的条形图也称为 柱形图 (column chart). 绘制条形图 1 import mat ...

最新文章

  1. 指针的本质--u_char*指针在Nginx源码中的应用及原因
  2. 计算机的安全问题中保密是指,计算机安全保密练习册答案.doc
  3. 华南理工大学网络教育计算机答案,计算机电路基础·随堂练习2019春华南理工大学网络教育答案.doc...
  4. linux ps top 命令 VSZ,RSS,TTY,STAT, VIRT,RES,SHR,DATA的含义
  5. matlab 按钮组设置,MATLAB中的单选按钮和按钮组
  6. HDFS NameNode内存详解
  7. php mvc 逻辑层在哪,mvc的业务逻辑应该放哪里?
  8. Unity C# 反编译
  9. 精锐教育创始人张熙辞任CEO 李晓明接任
  10. HDU 4722 Good Numbers 2013年四川省赛题
  11. SFB 项目经验-29-批量-启用用户-启用企业语音-设置分机号(项目中)
  12. html怎么把view变成标签_html单选按钮默认选中怎么做?input标签的单选按钮用法实例...
  13. LeetCode 410. Split Array Largest Sum
  14. Elasticsearch+Mongo亿级别数据导入及查询实践
  15. 2022年华数杯数学建模
  16. 【算法学习】布谷鸟搜索算法【CuckooSearch(CS)】
  17. 一款快速开单 订单发货收货的在线订货管理软件
  18. sumifs多条件求和步骤,sumifs函数运用
  19. 信阳市少年计算机学校,信阳市胜利路学校开展少年之声小记者选拔活动
  20. 【微信小程序】一文读懂页面导航

热门文章

  1. VSCode更新到1.42.1版本有问题(January 2020 (version 1.42))
  2. java-php-python-旅游景区预约管理系统计算机毕业设计
  3. do{...}while(false)的用法
  4. 数据通信网络基础,华为VRP系统(HCLA-Datacom v1.0华为认证数通笔记2)
  5. 视频压缩怎么弄?建议收藏这些方法
  6. 福建省谷歌卫星地图下载
  7. html源码里面写current,HTML Video currentTime用法及代码示例
  8. 2006中国城市竞争力:60个城市综合竞争力排名
  9. deepin添加启动图标(快捷方式)
  10. 员工股权激励_激励技术员工的5种方法