国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Basemap繪制中國地圖

2019-11-08 19:46:12
字體:
來源:轉載
供稿:網友

這篇博文主要實現用Pyhon,Matplotlib/Basemap繪制中國地圖,主要是各省份行政圖(輪廓圖),地形圖和人口分布圖,其中人口分布可以嵌入到上述圖形中。

參考鏈接: (1)https://www.zhihu.com/question/49669755 (2)http://basemaptutorial.readthedocs.io/en/latest/backgrounds.html#fillcontinents

1、數據準備: (1)到http://www.gadm.org/download 下載中國shapefile格式的資料,下載后的文件名為CHN_adm_shp.zip ,解壓后如圖: 這里寫圖片描述 主要用到的文件是CHN_adm1.shp,另外CHM_adm1.csv 可以用notepad打開查看一下文件內容

(2)2015Cities-CHINA.xlsx ,包含中國各城市的經緯度,自己網上搜索整理,數據可能過時了,和維基百科查到的數據不太對,但是拿來寫個小程序還是足夠的) xlsx可以用Excel打開查看一下: 這里寫圖片描述 在python中可以導入pandas模塊,使用read_excel() 函數方便讀取文件

程序1,各省份輪廓圖

import timestart = time.clock()from mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as pltfrom matplotlib.patches import Polygonfig = plt.figure()ax1 = fig.add_axes([0.1,0.1,0.8,0.8])map = Basemap(llcrnrlon=80.33, llcrnrlat=3.01, urcrnrlon=138.16, urcrnrlat=56.123, resolution='h', 這里寫圖片描述

程序2,地形圖

import timestart = time.clock()from mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as pltfrom matplotlib.patches import Polygonimport pandas as pdimport numpy as npposi=pd.read_excel("D://Files//datasets//2015Cities-CHINA.xlsx") #讀取中國城市數據lat = np.array(posi["lat"][0:120]) # 獲取維度之維度值lon = np.array(posi["lon"][0:120]) # 獲取經度值pop = np.array(posi["pop"][0:120],dtype=float) size=(pop/np.max(pop))*100 map = Basemap(llcrnrlon=80.33, llcrnrlat=3.01, urcrnrlon=138.16, urcrnrlat=56.123, resolution='h', projection='cass', lat_0 = 42.5,lon_0=120)map.readshapefile("D://GoogleDownload//CHN_adm_shp//CHN_adm1",'states',drawbounds=True)map.etopo() # 繪制地形圖,浮雕樣式map.drawcoastlines()x,y = map(lon[2],lat[2]) # 北京市坐標,經緯度坐標轉換為該map的坐標a,b = map(lon,lat)# map.scatter(a,b,s=size) # 取消注釋此行即可獲得中國各地區人口分布示意圖map.scatter(x,y,s=200,marker='*',facecolors='r',edgecolors='r') # 繪制首都end=time.clock()print(end-start)plt.show()

這里寫圖片描述

程序3,人口分布圖

import urllibimport numpy as npimport matplotlibmatplotlib.rcParams['toolbar'] = 'None'import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfrom matplotlib.animation import FuncAnimationimport pandas as pdimport seaborn as sns# posi=pd.read_csv("D://Files//datasets//CitiesLatLon_China.csv")posi=pd.read_excel("D://Files//datasets//2015Cities-CHINA.xlsx")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) # 獲取人口數,轉化為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.)map.drawcoastlines() map.drawcountries() map.drawcounties()map.readshapefile("D://GoogleDownload//CHN_adm_shp//CHN_adm1",'states',drawbounds=True)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()

這里寫圖片描述


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 木里| 永福县| 云南省| 丰台区| 娱乐| 九江市| 澳门| 诸城市| 巢湖市| 德化县| 筠连县| 临安市| 昌都县| 徐水县| 彭泽县| 密山市| 沧源| 南涧| 达孜县| 土默特右旗| 香格里拉县| 松溪县| 丰台区| 谢通门县| 永靖县| 德保县| 嘉善县| 建水县| 孟州市| 长顺县| 斗六市| 通辽市| 乌兰察布市| 甘洛县| 根河市| 开阳县| 湘阴县| 新巴尔虎右旗| 赣榆县| 石棉县| 沙洋县|