原文链接:http://www.douban.com/group/topic/32821988/

原文链接:http://www.cnblogs.com/vamei/archive/2012/09/16/2687954.html

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

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

( Matplot经常与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 = -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('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, matplot, mpl_toolkits

你可以google并找到它们。

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

PythonGIS可视化—Matplot basemap工具箱的更多相关文章

  1. 使用Spark MLlib进行情感分析

    使用Spark MLlib进行情感分析             使用Spark MLlib进行情感分析 一.实验说明 在当今这个互联网时代,人们对于各种事情的舆论观点都散布在各种社交网络平台或新闻提要 ...

  2. WinForm 窗体

    Winform是.NET开发中对windows Form的一种称谓,form是窗体的意思,winform 称之为windows form. 一般中我们使用的东西分为 客户端.网页.APP 三大类. w ...

  3. OpenCV学习教程入门篇<一、介绍>

    OpenCV,是Inter公司开发的免费开源专门因为图像处理和机器视觉的C/C++库,英文全称是Open Source Computer Vision. 1. 可视化语言Matlab与OpenCV都能 ...

  4. 昨天521表白失败,我想用Python分析一下...表白记录和聊天记录

    昨天跟喜欢的妹子表白了. 失败了!.下面是表白的聊天记录: (跟妹子已经认识一段时间) 我:灭嘤嘤,我喜欢你. 妹子:你干嘛? 我:今天520,跟你表白鸭. 妹子:那....有多喜欢? 我: 有很多很 ...

  5. Python:爬取全国各省疫情数据并在地图显示

    代码: import requests import pymysql import json from pyecharts import options as opts from pyecharts. ...

  6. Python-气象-大气科学-可视化绘图系列(二)——利用basemap叠加地图,并添加白化效果(代码+示例)

    本文为原创链接: https:////www.cnblogs.com/zhanling/p/12193031.html 白化单图代码: import numpy as np import xarray ...

  7. Python可视化库

    转自小小蒲公英原文用Python可视化库 现如今大数据已人尽皆知,但在这个信息大爆炸的时代里,空有海量数据是无实际使用价值,更不要说帮助管理者进行业务决策.那么数据有什么价值呢?用什么样的手段才能把数 ...

  8. .Net开发笔记(十九) 创建一个可以可视化设计的对象

    阅读本篇博客之前需要了解VS窗体设计器的工作原理,详细可参见本系列博客(十).(十一).(十二).必须需要知道的一条结论就是:处于窗体设计器(Form Designer)中的任何组件(包含控件,下同) ...

  9. SharePoint 2013 图文开发系列之可视化WebPart

    有了WebPart开发的基础,再进行可视化WebPart开发,就容易多了.创建和开发过程,两者非常相似,下面,我们简单介绍下可视化WebPart的开发. 1.添加新项目,选择SharePoint 20 ...

随机推荐

  1. 分布式系列文章 —— 从 ACID 到 CAP / BASE

    转自:https://mp.weixin.qq.com/s?amp;mid=2652037708&__biz=MzI0NDI0MTgyOA%3D%3D&idx=1&chksm= ...

  2. 使用canvas截图网页为图片并解决跨域空白以及模糊问题

    前几天给了个需求对浏览器网页进行截图,把网页统计数据图形表等截图保存至用户本地. 首先对于网页截图,我用的是canvas实现,获取你需要截图的模块的div,从而使用canvas对你需要的模块进行截图. ...

  3. CentOS7 笔记 (一) .NETCore

    安装系统CentOS,虚拟机好麻烦,直接在阿里云开了一个6个月免费的ECS. 熟悉Linux 基本命令 登录,exit,vi ,vim,vi保存关闭,w,ls,mkdir,df,ip addr,修改系 ...

  4. 3分钟实现小程序唤起微信支付 Laravel教程

    微信支付的接入,如果不使用成熟的开发包,将是巨大的工作量. 依赖 EasyWechat 先在 laravel 项目中依赖 easywechat 这个包 composer require "o ...

  5. UVa OJ 679 - Dropping Balls

    本题是一个二叉树问题——Perfect Binary Tree. 一个完美二叉树(PBT)的深度为D,从根结点开始,按层次遍历顺序编号为1,2,...,2D-1. 有若干个球,依次由根结点落下.当一个 ...

  6. TCP连接之未连接队列的理解

    tcp服务器在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认 ...

  7. isap算法模板poj 1273gap+弧优化 最大流

    几个比较好的博客 http://www.renfei.org/blog/isap.html http://kenby.iteye.com/blog/945454 http://blog.csdn.ne ...

  8. 0726xtrbackup实例详解

    转自http://www.cnblogs.com/olinux/p/5207887.html MySQL中的xtrabackup的原理解析 xtrabackup的官方下载地址为 http://www. ...

  9. Git的基本设置

    进入虚拟机环境中:首先我们对 Git 进行用户名和邮箱进行设置,请参照下面格式,替换为你自己常用的用户名和邮箱来完成设置: $ git config --global user.name " ...

  10. Android ContextMenu的使用

    ContextMenu介绍: 假设一个View注冊了上下文菜单.那么当长按该View时便会弹出一个浮动菜单,来供选择下一步操作. 实现这个功能须要调用setOnCreateContextMenuLis ...