1. 程式人生 > >地圖視覺化學習(轉載)

地圖視覺化學習(轉載)

basemap安裝

通過該網站(https://www.lfd.uci.edu/~gohlke/pythonlibs/)下載對應版本的Pyproj和basemap的whl檔案,如圖12.1和12.2所示。
在這裡插入圖片描述
切換到這兩個whl檔案的路徑下,按順序通過pip依次安裝Pyproj和basemap檔案,程式碼如下,安裝Pyproj

h:
cd H:\python資料分析\資料
pip install pyproj-1.9.5.1-cp36-cp36m-win_amd64.whl

在這裡插入圖片描述
同樣的方法安裝basemap

basemap使用

首先,匯入需要的第三方庫,通過basemap初始化一個地圖物件,通過drawcoastlines繪製海岸線,程式碼如下。

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

map1 = Basemap(projection='ortho', lat_0=90, lon_0=-105,
              resolution='l', area_thresh=1000.0)      #初始化地圖物件
map1.drawcoastlines()      #繪製海岸線

通過drawcountries方法繪製國家邊界,程式碼如下

map1 = Basemap(projection='ortho', lat_0=90, lon_0=-105,
              resolution='l', area_thresh=1000.0) 
map1.drawcoastlines()  #繪製海岸線
map1.drawcountries()   #繪製國家

在實際案例中,需對特定國家或地區進行繪製地圖,這樣就需要通過llcrnrlon、llcrnrlat、urcrnrlon和urcrnrlat指定左下角經緯度和右上角經緯度,程式碼如下

map2 = Basemap(projection='stere', lat_0=90, lon_0=-105,
               llcrnrlon=-118.67, llcrnrlat=23.41,
               urcrnrlon=-64.5, urcrnrlat=45.44,
              resolution='l', area_thresh=1000.0) 
map2.drawcoastlines()  #繪製海岸線
map2.drawcountries()   #繪製國家
map2.drawmapboundary() #繪製邊界
map2.drawstates()      #繪製州
map2.fillcontinents(color='blue',alpha=0.5)  #填充顏色

map2.drawmeridians(np.arange(0, 360, 30))    #繪製經線
map2.drawparallels(np.arange(-90, 90, 30))   #繪製緯線

通過座標定位,可以在地圖上繪製圖形,程式碼如下

map2 = Basemap(projection='stere', lat_0=90, lon_0=-105,
               llcrnrlon=-118.67, llcrnrlat=23.41,
               urcrnrlon=-64.5, urcrnrlat=45.44,
              resolution='l', area_thresh=1000.0) 
map2.drawcoastlines()  #繪製海岸線
map2.drawcountries()   #繪製國家
map2.drawmapboundary() #繪製邊界
map2.drawstates()      #繪製州

map2.drawmeridians(np.arange(0, 360, 30))    #繪製經線
map2.drawparallels(np.arange(-90, 90, 30))   #繪製緯線

lon = -74
lat = 40.43
x,y = map2(lon, lat)       #對映座標
map2.plot(x, y, 'ro', markersize=8)  #繪製散點圖

通過matplotlib庫的text方法,為散點加入文字註釋。

map2 = Basemap(projection='stere', lat_0=90, lon_0=-105,
               llcrnrlon=-118.67, llcrnrlat=23.41,
               urcrnrlon=-64.5, urcrnrlat=45.44,
              resolution='l', area_thresh=1000.0) 
map2.drawcoastlines()  #繪製海岸線
map2.drawcountries()   #繪製國家
map2.drawmapboundary() #繪製邊界
map2.drawstates()      #繪製州

map2.drawmeridians(np.arange(0, 360, 30))    #繪製經線
map2.drawparallels(np.arange(-90, 90, 30))   #繪製緯線

lon = -74
lat = 40.43
x,y = map2(lon, lat)       #對映座標
map2.plot(x, y, 'ro', markersize=8)  #繪製散點圖
plt.text(x,y,'New York')   #文字註釋

pyecharts地圖繪製

利用pyecharts繪製地圖,需要下載地圖js檔案,通過pip進行安裝
pip install echarts-countries-pypkg #全球國家地圖
pip install echarts-china-provinces-pypkg #中國省級地圖
pip install echarts-china-cities-pypkg #中國市級地圖
利用Map方法可繪製地圖,程式碼如下

value = [155, 78, 23, 65]
label = ["北京", "上海", "西藏", "廣東"]
map1 = pyecharts.Map("全國地圖示例")
map1.add("",label, value, maptype='china')
map1.render()   #生成html檔案

該add方法的引數如下,maptype設定地圖型別,支援china、world、中國省市名稱等;is_roam可縮放地圖;is_map_symbol_show顯示地圖紅點

add(name, attr, value,
    maptype='china',
    is_roam=True,
    is_map_symbol_show=True, **kwargs)

設定is_label_show=True,可以顯示各省份名稱,程式碼如下,如圖12.25所示。

value = [155, 78, 23, 65]
label = ["北京", "上海", "西藏", "廣東"]
map1 = pyecharts.Map("全國地圖示例", width=1200, height=600)
map1.add("",label, value, maptype='china', is_label_show=True)
map1.render()   #生成html檔案

value = [233, 102, 41, 82]
attr = ['武漢市', '咸寧市', '黃岡市', '黃石市']
map1 = pyecharts.Map("湖北省地圖")
map1.add("", attr, value, maptype='湖北', is_visualmap=True,
        visual_text_color='#000')
map1.render()

value = [46, 54, 45, 82, 45]
attr= ["China", "Canada", "Brazil", "Russia", "United States"]
map1 = pyecharts.Map("世界地圖", width=1200, height=600)
map1.add("", attr, value, maptype="world", is_visualmap=True,
        visual_text_color='#000', is_map_symbol_show=False)
map1.render()

地圖座標系元件用於地圖的繪製,支援在地圖上繪製散點圖,線集。利用Geo方法可在地圖上繪製散點圖等,程式碼如下。

data = [
    ('上海', 78),('武漢', 56),('長沙', 45),('北京', 65),('蘇州', 32),('鹽城', 15),
    ('南昌', 87),('青島', 45),('廣州', 78),('拉薩', 12),('桂林', 21),('西安', 42),
    ('濟南', 12)]

geo = pyecharts.Geo("地圖繪製案例一",
          title_pos="center", width=1200,
          height=600)
attr, value = geo.cast(data)
geo.add("", attr, value, visual_range=[0, 100], visual_text_color="#fff",
        geo_normal_color="#FFFFFF",
        symbol_size=15, is_visualmap=True)
geo.render()

add(name, attr, value,
    type="scatter",
    maptype='china',
    symbol_size=12,
    border_color="#111",
    geo_normal_color="#323c48",
    geo_emphasis_color="#2a333d",
    is_roam=True, **kwargs)

data = [
    ('上海', 78),('武漢', 56),('長沙', 45),('北京', 65),('蘇州', 32),('鹽城', 15),
    ('南昌', 87),('青島', 45),('廣州', 78),('拉薩', 12),('桂林', 21),('西安', 42),
    ('濟南', 12)]

geo = pyecharts.Geo("地圖繪製案例二",
          title_pos="center", width=1200,
          height=600)
attr, value = geo.cast(data)
geo.add("", attr, value, type='heatmap', visual_range=[0, 100], visual_text_color="#fff",
        geo_normal_color="#FFFFFF",
        symbol_size=15, is_visualmap=True)
geo.render()