立即注册 登录
气象家园 返回首页

xiuyuanyang的个人空间 http://bbs.06climate.com/?23998 [收藏] [复制] [分享] [RSS]

日志

Matplotlib—basemap绘制中国地图外加人口分布

已有 2042 次阅读2017-3-21 14:21 |个人分类:编程技能--Python| 画中国地图

Basemap - plot on map projections (with coastlines and political boundaries) using matplotlib.

但是basemap并不是matplotlib默认安装的一部分。

Basemap<= =Matplotlib + python 2.5 (or later) + numpy + Geos (3.1.1 or later)

1、下载basemap

https://github.com/matplotlib/basemap

2、安装相关模块

2.1 我使用的是Anaconda,安装Anaconda后已集成了matplotlibPythonnumpy,所以可以直接在Anaconda prompt 中安装geosbasemap

指令很简单:conda install + package name(貌似无需第一步下载,Anaconda会自行获取安装包!?)

2.1.1 conda install geos

检查是否安装成功:

2.1.2 conda list basemap(时间较长)

2.2 如果没有安装Anaconda,可以执行第一步,下载basemap包,按照里面的readme文件,执行安装,依然先安装basemap所需的相关库(GEO包里也包含readme文件)

可以参考:

Windows下安装basemap

http://blog.sina.com.cn/s/blog_6ab074c30102w1an.html

Linux下安装basemap

http://blog.csdn.net/dbzhang800/article/details/6549554

3、绘制地图

参考:

http://www.cnblogs.com/vamei/archive/2012/09/16/2687954.html

http://blog.csdn.net/zm714981790/article/details/51224650

http://blog.sina.com.cn/s/blog_6ab074c30102w1an.html

http://blog.csdn.net/ssy8stephy/article/details/52589315

matplotlib--basemap 官网

http://matplotlib.org/basemap/

 所需地理数据(.shp文件),下载地址:

https://www.statsilk.com/maps/download-free-shapefile-maps(里面包含下面的这个数据)

http://www.gadm.org/country

代码如下:参考http://blog.csdn.net/ouening/article/details/55227364

import urllib

import numpy as np

import matplotlib

matplotlib.rcParams['toolbar'] = 'None'

import matplotlib.pyplot as plt

from mpl_toolkits.basemap import Basemap

from matplotlib.animation import FuncAnimation

import pandas as pd

import seaborn as sns

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#posi=pd.read_csv("D:\\Files\\datasets\\CitiesLatLon_China.csv")

读取中国地理信息数据,格式为.shp/.csv

posi=pd.read_excel("D:\\Files\\datasets\\2015Cities-CHINA.xlsx")

读取中国人口和GDP信息数据(换成所需标出的站点数据,保存为txt格式)

 

lat = np.array(posi["lat"][0:120])               获取纬度值

lon = np.array(posi["lon"][0:120])              获取经度值

pop = np.array(posi["pop"][0:120],dtype=float)

获取人口数,转化为numpy浮点型

#gdp = np.array(posi["GDP"][0:120],dtype=float)

获取GDP,转化为numpy浮点型

 

size=(pop/np.max(pop))*100  

绘制散点图时图形的大小,如果之前pop不转换为浮点型,会没有大小不一的效果

 

#size=(gdp/np.max(gdp))*100   

绘制散点图时图形的大小,如果之前pop不转换为浮点型,会没有大小不一的效果

以上部分是读取设置标注在地图中的人口或是相关信息的操作,在此可以换做标注站点!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

以下部分绘制背景地图

map = Basemap(projection='stere', lat_0=35, lon_0=110, llcrnrlon=82.33, llcrnrlat=3.01, urcrnrlon=138.16, urcrnrlat=53.123, resolution='l', area_thresh=10000, rsphere=6371200.)

basemap参数介绍:

projection - the map projection. stere代表球面投影

llcrnrlat - latitude of lower left hand corner of the desired map domain (degrees).

urcrnrlat - latitude of upper right hand corner of the desired map domain (degrees).

llcrnrlon - longitude of lower left hand corner of the desired map domain (degrees).

urcrnrlon- longitude of upper right hand corner of the desired map domain (degrees).

resulution-resolution of boundary database to use, c (crude), l (low), i (intermediate), h (high), f (full) or None.

map.drawcoastlines()   #画海岸线

map.drawcountries()   #画国界线

map.drawcounties()         #画县界限

map.readshapefile("D:\\GoogleDownload\\CHN_adm_shp\\CHN_adm1",'states',drawbounds=True)

# Read in shape file, optionally draw boundaries on map注意:虽然程序里表明.shp文件,但是其他的.shx\.dbf等文件也要在同一文件夹下,否则shape文件读取报错!

map.drawmapboundary() #画中国内部区域,即省界线

 

parallels = np.arange(0.,90,10.) 创建纬线数组

map.drawparallels(parallels,labels=[1,0,0,0],fontsize=10) # 绘制纬线

 

meridians = np.arange(80.,140.,10.) 创建经线数组

map.drawmeridians(meridians,labels=[0,0,0,1],fontsize=10) # 绘制经线

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

以下部分在背景地图上绘制表示各省市人口数的点

x,y = map(lon,lat) #现将各省市经纬度转换为投影坐标

注意:此处经纬度的位置,先经度,后纬度,不然程序不会报错,但是图上不会显示人口数的点!!

# map.scatter(x,y,edgecolors='r',facecolors='r',marker='*',s=320)

 

map.scatter(x,y,s=size)

 

plt.title("Population Distribution in China")

plt.show()


 pythonmatplotlib的颜色及线条控制

http://www.cnblogs.com/darkknightzh/p/6117528.html

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

结合以上参考资料,绘制中国地图以及添加AERONET站点

主要结合了以下两篇大神写的文章,很清晰,明了!

http://blog.csdn.net/ouening/article/details/55227364

http://www.cnblogs.com/vamei/archive/2012/09/16/2687954.html

代码如下:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

结果:



评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

返回顶部