Matplotlib裡面提供簡單的方法,然後可以實作出大量的科學計算,並且能夠客製化製作2D圖表。
最常被應用的應該是製作地圖方面,搭配Basemap,可以輕易地畫出地圖並且儲存。例如NASA衛星圖片。
撰寫步驟:
1. 先設計一個basemap物件,用來表示地圖物件
2. 設置地圖的屬性
3. 讀取外部資訊
4. 儲存或顯示地圖
一、設計basemap
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
def practice(request):
map = Basemap(projection='merc' ,
resolution='i' , fix_aspect=True,
llcrnrlon=119.0 , llcrnlat=21.8,
urcrnlon=122.05 , urcrnrlat=25.4,
lat_ts =20)
參數說明1. resolution = i 表示簡單畫出海岸線 / c 表示粗線畫出海岸線
2. projection = merc 麥卡拖投影(矩形平面) / ortho 正投影(圓滾滾的地球)
3. llcrnrlat,llcrnrlon 經緯度的最低值(lower lat/lon),這裡設定台灣的經緯度
4. urcrnrlat,urcrnrlon 經緯度的最高值(upper lat/lon),這裡設定台灣的經緯度
5. lat_ts 最大緯度(我目前不知道這作用)
二、設置地圖屬性
#海岸線的寬度
map.drawcoastlines(linewidth=1)
#儲存map , dpi=100表示存成800*600
plt.savefig('practice_map' , dpi=100)
plt.show()
跑出來的圖#畫緯度線23.5和25,labels標示出座標度數,fontsize文字大小
map.drawparallels(np.arange(23.5 , 25) , labels=[1,0,0,0] , fontsize=10)
#畫經度線120和122,labels標示出座標度數,fontsize文字大小
map.drawmeridians(np.arange(120,122),labels=[0,0,0,1],fontsize=10)
#map 底色backgroubd-color
map.drawmapboundary(fill_color='aqua')
#取一個title
plt.title('Practice')
#設定XY說明label , xy範圍0~1(預設是中間0.5)
plt.xlabel('lon' , fontsize=12 , x=1)
plt.ylabel('lat' , fontsize=12 , y=1)
三、讀取外部資訊
因為basemap提供的地圖資訊,似乎沒有到更細的資料,因此你必須透過讀取外部資訊,顯示更多的地圖資訊(縣市或鄉政),這個檔案叫做shapefile(.shp)
import shapefile
def practice(request):
map = Basemap(projection='merc' ,
resolution='i' , fix_aspect=True,
llcrnrlon=119.0 , llcrnlat=21.8,
urcrnlon=122.05 , urcrnrlat=25.4,
lat_ts =20)
#中間地圖屬性設定略過...
#讀取shapefile
map.readshapefile(shape_path , linewidth=0.25 , drawbounds=True)
這裡提供免費的shapefile#可以畫出NASA衛星照片等等的效果
map.bluemarble()
請問一下,我測式結果卡住了,可否提供台灣的shapefile 以及 shapefile.py
回覆刪除這個是台灣交通部開放的shapefile檔案
刪除https://gist-map.motc.gov.tw/Complex/MapTopic
用readshapefile指定正確路徑,應該就可以畫出shapefile中的資訊
謝謝你 這是我剛好需要的Idea 感恩!
回覆刪除很高興能幫上您的忙~~~
刪除