[Python] Basemap

rodertW發表於2019-01-30

參考:https://blog.csdn.net/sinat_18665801/article/details/82291067#1__15

 

附世界地圖:

 

# 該2行包括必要的basemap和matplotlib庫------世界地圖
from mpl_toolkits.basemap import Basemap    
import matplotlib.pyplot as plt

# plt.figure(figsize=(10,8))
# map = Basemap()
map=Basemap(
    llcrnrlon=77,
    llcrnrlat=14,
    urcrnrlon=140,
    urcrnrlat=51,
    projection='lcc',
    lat_1=33,
    lat_2=45,
    lon_0=100
)#中國地圖
map.drawcoastlines()#海岸線
map.drawcountries(linewidth=1.5)#國界線
map.readshapefile('gadm36_CHN_shp/gadm36_CHN_1', 'states', drawbounds=True)
plt.show()
plt.savefig('momo.png')

 

美國地圖及人口熱力圖

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from matplotlib import cm

# 繪製基礎地圖,選擇繪製的區域,因為是繪製美國地圖,故選取如下經緯度,lat_0和lon_0是地圖中心的維度和經度

map = Basemap(projection='stere',lat_0=90,lon_0=-105,\
            llcrnrlat=23.41 ,urcrnrlat=45.44,\
            llcrnrlon=-118.67,urcrnrlon=-64.52,\
            rsphere=6371200.,resolution='l',area_thresh=10000)#美國地圖
# map = Basemap(projection='stere', 
#               lat_0=0, lon_0=280,
#               llcrnrlon=73.33, 
#               llcrnrlat=3.51, 
#               urcrnrlon=112.16, 
#               urcrnrlat=53.123)
# map=Basemap(
#     llcrnrlon=77,
#     llcrnrlat=14,
#     urcrnrlon=140,
#     urcrnrlat=51,
#     projection='lcc',
#     lat_1=33,
#     lat_2=45,
#     lon_0=100
# )#中國地圖

map.drawmapboundary()   # 繪製邊界
#map.fillcontinents()   # 填充大陸,發現填充之後無法顯示散點圖,應該是被覆蓋了
map.drawstates()        # 繪製州
map.drawcoastlines()    # 繪製海岸線
map.drawcountries()     # 繪製國家
# map.drawcounties()      # 繪製縣

parallels = np.arange(0.,90,10.) 
map.drawparallels(parallels,labels=[1,0,0,0],fontsize=10) # 繪製緯線

meridians = np.arange(-110.,-60.,10.)
map.drawmeridians(meridians,labels=[0,0,0,1],fontsize=10) # 繪製經線


posi=pd.read_csv("C:\\Users\\Downloads\\datasets-master\\2014_us_cities.csv") # 讀取資料

## 原始資料有3228組資料,我只選擇了180個城市的資料
lat = np.array(posi["lat"][1:1100])                        # 獲取維度之維度值
lon = np.array(posi["lon"][1:1100])                        # 獲取經度值
pop = np.array(posi["pop"][1:1100],dtype=float)    # 獲取人口數,轉化為numpy浮點型

size=(pop/np.max(pop))*1000     # 繪製散點圖時圖形的大小,如果之前pop不轉換為浮點型會沒有大小不一的效果
x,y = map(lon,lat)

# plt.text(x, y, 'Lagos',fontsize=12,fontweight='bold',
#                     ha='left',va='bottom',color='k')
# 
# 
# x, y = map(lon[0], lat[0])
# 
# plt.text(x, y, 'Barcelona',fontsize=12,fontweight='bold',
#                     ha='left',va='center',color='k',
#                     bbox=dict(facecolor='b', alpha=0.2))
#                     

# plt.scatter(x,y,s=size,cmap=cm.hsv,edgecolors=None,facecolors='c')

# plt.scatter(x,y,s=size,cmap=cm.hsv) # 使用matplotlib的散點圖繪製函式

map.scatter(x,y,s=size)     # 也可以使用Basemap的methord本身的scatter
plt.title('Population distribution in America')
plt.show()

資料下載地址:https://github.com/plotly/datasets/blob/master/2014_us_cities.csv 

相關文章