天天看點

Python matplot工具包之一的 mpl_toolkits繪制屬于你的世界地圖

Python matplot工具包之一的 mpl_toolkits繪制屬于你的世界地圖

Python之是以這麼流行,是因為它不僅能夠應用于科技領域,還能用來做許多其他學科的研究工具,繪制地圖便是其功能之一。

今天我們用matplot工具包之一的 mpl_toolkits 來繪制世界地圖,這是一個簡單的可視化工具,如果希望繪制更加複雜的地圖,可以考慮使用Google Maps API,不過這不在我們今天的讨論範圍之内。

1.準備

開始之前,你要確定Python和pip已經成功安裝在電腦上。

**(可選1) **如果你用Python的目的是資料分析,可以直接安裝Anaconda,它内置了Python和pip.

**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優點。

請選擇以下任一種方式輸入指令安裝依賴 :

  1. Windows 環境 打開 Cmd (開始-運作-CMD)。
  2. MacOS 環境 打開 Terminal (command+空格輸入Terminal)。
  3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install numpy
pip install matplotlib      

為了使用 mpl_toolkits, 單純安裝matplotlib是不夠的,我們還需要單獨安裝basemap,如果你已經安裝了Anaconda,那這一步就非常好辦,輸入以下指令安裝即可:

conda install basemap      
Python matplot工具包之一的 mpl_toolkits繪制屬于你的世界地圖

如果沒有的話,就稍微麻煩一點:

1.安裝geos: pip install geos

Python matplot工具包之一的 mpl_toolkits繪制屬于你的世界地圖

2.根據你的Python版本下載下傳basemap

​​​ http://www.lfd.uci.edu/~gohlke/pythonlibs/#basemap​​ 注意cp後面的數字是Python的版本。(在頁面上按ctrl+F,輸入basemap快速定位)

Python matplot工具包之一的 mpl_toolkits繪制屬于你的世界地圖

3.在 cmd 下進入該檔案的目錄,運作

pip install basemap‑1.2.1‑cp37‑cp37m‑win_amd64.whl      
2.簡單的地圖

讓我們開始繪制一個地球,中心指向中國:

#繪制一個地球
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import  Basemap

#初始化圖形
plt.figure(figsize=(8,8))
#底圖:圓形 ,lat_0:緯度:log_o:經度,(113,29)是武漢
m=Basemap(projection='ortho',resolution=None,lat_0=29,lon_0=113)

#底色
m.bluemarble(scale=0.5)
#顯示
plt.show()      
Python matplot工具包之一的 mpl_toolkits繪制屬于你的世界地圖

效果還不錯哦,不僅如此,它其實不單單隻是一張圖像,它還是一個功能齊全的matplot畫布。這也就意味着,你能夠在上面畫線!讓我們放大地圖,進入中國區域,然後标記出深圳的位置:

不要用藍底圖了,看得不是很清晰,我們換成浮雕型:#導入需要的包
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import  Basemap

#以下三行是為了讓matplot能顯示中文
from  pylab import  mpl
mpl.rcParams['font.sans-serif']=['FangSong']
mpl.rcParams['axes.unicode_minus']=False

fig=plt.figure(figsize=(8,8))

#注意幾個新增的參數,width和height是用來控制放大尺度的
#分别代表投影的寬帶和高度(8E6 代表,8x10^6米
m=Basemap(projection='lcc',resolution=None,width=8E6,height=8E6,lat_0=23,lon_0=113,)
m.etopo(scale=0.5)

#這裡的經緯度:(經度,緯度)
x,y=m(113,23)
plt.plot(x,y,'ok',markersize=5)
plt.text(x,y,'深圳',fontsize=12,color="red")
plt.show()      
Python matplot工具包之一的 mpl_toolkits繪制屬于你的世界地圖

可以很明顯地看到山區、丘陵等地理樣貌。你還可以根據你的需要,針對某幾個城市做連線或者繪制某些經緯度之間的區域。别忘了,這可是matplotlib可編輯的畫布。

3.世界地圖

接下來,我們将上述的世界地圖展開成帶經緯線的平面圖形。

#導入需要的包
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import  Basemap
from itertools import  chain

def draw_map(m,scale=0.2):
    #繪制帶陰影的浮雕圖像
    m.shadedrelief(scale=scale)
    #根據經緯度切割,每13度一條線
    lats=m.drawparallels(np.linspace(-90,90,13))
    lons=m.drawmeridians(np.linspace(-180,180,13))

    #集合所有線條
    lat_lines=chain(*(tup[1][0] for tup in lats.items()))
    lon_lines = chain(*(tup[1][0] for tup in lons.items()))
    all_lines = chain(lat_lines,lon_lines)
    #循環畫線
    for line in all_lines:
        line.set(linestyle='-',alpha=0.3,color='w')
fig=plt.figure(figsize=(8,6),edgecolor='w')
m=Basemap(projection='cyl',resolution=None,
          llcrnrlat=-90,urcrnrlat=90,
          llcrnrlon=-180,urcrnrlon=180,)
draw_map(m)
plt.show()      
Python matplot工具包之一的 mpl_toolkits繪制屬于你的世界地圖
Python matplot工具包之一的 mpl_toolkits繪制屬于你的世界地圖

設定地圖上面的景點: