||
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后已集成了matplotlib、Python和numpy,所以可以直接在Anaconda prompt 中安装geos和basemap
指令很简单: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://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()
python中matplotlib的颜色及线条控制
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
代码如下:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
结果:
Copyright ©2011-2014 bbs.06climate.com All Rights Reserved. Powered by Discuz! (京ICP-10201084)
本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论