登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 xiuyuanyang 于 2017-3-21 15:21 编辑
最近在学习Python,通过上网搜集资料,最近利用Python简单画了一幅中国地图外加站点分布,程序很简单,把一些看到的好的材料分享给大家,希望能帮助一些人!
Matplotlib—basemap绘制中国地图 Basemap - plot on mapprojections (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 2、安装相关模块 2.1 我使用的是Anaconda,安装Anaconda后已集成了matplotlib、Python和numpy,所以可以直接在Anacondaprompt 中安装geos和basemap 指令很简单:conda install +package name(貌似无需第一步下载,Anaconda会自行下载获取安装包!?)
2.1.1 conda install geos 检查是否安装成功: Conda list ,显示如下: 2.1.2 conda list basemap(时间较长) 2.2 如果没有安装Anaconda,可以执行第一步,下载basemap包,按照里面的readme文件,执行安装,依然先安装basemap所需的相关库(GEO包里也包含readme文件) 可以参考: Windows下安装basemap Linux下安装basemap
3、绘制地图 参考: http://blog.csdn.net/zm714981790/article/details/51224650 matplotlib--basemap 官网
所需地理数据(.shp文件),下载地址:
分享一个网上搜到的文章,写的很好,里面有我自己加的理解内容,因为初学Python,很多用于不专业,若有问题,请各位朋友指出! 代码如下: 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 - themap 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-resolutionof 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() !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 最后,是我自己根据上面的内容写的绘制中国地图以及站点分布图,程序很简单,仅供参考,如有更好的方法或是关于图片问题,请指出,我们交流分享! 结果:
station_map.py
(1.55 KB, 下载次数: 50, 售价: 3 贡献)
|