Python Cartopy地图投影【2】
上期文章見:Python Cartopy地圖投影【1】
上期文章內(nèi)容綱要:
step1: 開始地圖投影
step2: GeoAxes 的常用方法
2.1 add_feature:添加海岸線、河流、湖泊等地理特征
2.2 gridlines:添加網(wǎng)格線以及相應(yīng)標(biāo)簽等
這期內(nèi)容繼續(xù)
2.3 set_extent:設(shè)置地理邊界
這個方法是用于設(shè)置GeoAxes的范圍(上下左右邊界)。
語法格式:
在這里
extents:范圍,格式為(x0, x1, y0, y1) ,分別對應(yīng)左右下上的經(jīng)緯度邊界
crs: 投影。若不設(shè)置則默認為ax1的投影
設(shè)置邊界范圍的圖【代碼見最后】
2.4 set_boundary:裁剪子圖形狀
語法格式:
axes.set_boundary(path, transform=None)關(guān)于這個函數(shù)的使用,我們將在接下來的蘭伯特投影和極地投影中舉例介紹。
3 三種常見地圖投影與實用技巧
我們針對不同的研究范圍需要使用不同的地圖投影,以保證關(guān)注范圍的圖形變形最小。比如我們關(guān)注北極地區(qū),那我們則通常使用極地投影,比如我們關(guān)注全球范圍,則我們更多使用最基礎(chǔ)的等距投影。所以我們要掌握這些常見投用的使用方法來應(yīng)對不同的情況。
3.1 等距網(wǎng)格投影 PlateCarree
語法:
cartopy.crs.PlateCarree(central_longitude=0.0)- central_longitude:中心經(jīng)度。默認為 0°
見下圖,中心經(jīng)度分別為0度(左)和180度(右)【代碼見最后】
需要說明的是,如果我們同時使用了 set_extent 方法來規(guī)定地圖的范圍(左右邊界),那么我們實際上無需通過 central_longitude 來設(shè)置中心經(jīng)度,因為會自動計算左右邊界的中心值。
當(dāng)我們沒有特殊需求時,我們一般都是用這個投影方式來進行繪制的。
3.2 蘭伯特投影 LambertConformal
蘭伯特投影一般用于展示中高緯度區(qū)域的圖形,因為中高緯度區(qū)域在這種投影下變形較小。
語法:
- central_longitude,central_latitude:投影中心的經(jīng)度和緯度,默認分別為 96°W 和 39°N
- cutoff:最南的緯度,默認為 30°S
這張圖其實也是360度,
這時候設(shè)置邊界不能用set_extent 函數(shù),可用set_boundary,上圖提到
3.3 NorthPolarStereo (北)極地投影
如果我們需要關(guān)注整個經(jīng)度范圍的高緯度區(qū)域時,我們會選擇極地投影,特別是研究海冰,南北極氣候的讀者會非常頻繁地運用到這個投影。這里我們以北極極地投影為例,若需調(diào)整為南極極地投影,只需將 North 關(guān)鍵字替換為 South。
語法:
cartopy.crs.NorthPolarStereo(central_longitude=0.0)此時圓了【代碼見最后】
代碼
2.3
# 繪制東北半球地圖 # 導(dǎo)入庫 import matplotlib.pyplot as plt # 調(diào)用matplotlib.pyplot模塊,用于調(diào)用基礎(chǔ)繪圖函數(shù) import cartopy.crs as ccrs # 調(diào)用cartopy.crs模塊,用于創(chuàng)建投影 import cartopy.feature as cfeature # 調(diào)用cartopy.feature模塊,引入默認地理信息 # 創(chuàng)建圖形 fig = plt.figure(figsize=[10, 5]) # 設(shè)置圖片大小10x5 # 創(chuàng)建1行1列的1個子圖,使用等距網(wǎng)格投影 ax1 = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree()) ax1.add_feature(cfeature.COASTLINE) # 添加海岸線 gl = ax1.gridlines(draw_labels=True,dms=True,x_inline=False,y_inline=False) # 繪制網(wǎng)格線 gl.top_labels = False # 通過對gridliner對象,這里即為gl變量進行設(shè)置,關(guān)閉頂部標(biāo)簽 gl.right_labels = False # 通過對gridliner對象,這里即為gl變量進行設(shè)置,關(guān)閉右側(cè)標(biāo)簽 ax1.set_extent([0, 180, 0, 90]) # 將圖形范圍設(shè)置為東北半球 plt.show()3.1
# 不同中心經(jīng)度的等距網(wǎng)格投影 # 導(dǎo)入庫 import matplotlib.pyplot as plt # 調(diào)用matplotlib.pyplot模塊,用于調(diào)用基礎(chǔ)繪圖 import cartopy.crs as ccrs # 調(diào)用cartopy.crs模塊,用于創(chuàng)建投影 import cartopy.feature as cfeature # 調(diào)用cartopy.feature模塊,引入默認地理信息 import cartopy.mpl.ticker as cticker # 調(diào)用cartopy.mpl.ticker模塊,用于修改經(jīng)緯度刻度格式# 創(chuàng)建圖形 fig = plt.figure(figsize=[10, 5]) # 設(shè)置圖片大小10x5 # 創(chuàng)建一個默認的等距網(wǎng)格投影子圖 ax1 = fig.add_subplot(1, 2, 1, projection=ccrs.PlateCarree(central_longitude=0)) # 創(chuàng)建1行2列的1個子圖,使用等距網(wǎng)格投影,中心經(jīng)度0° ax1.add_feature(cfeature.COASTLINE) # 添加海岸線 # 創(chuàng)建一個中心經(jīng)度為120°E的等距網(wǎng)格投影子圖 ax2 = fig.add_subplot(1, 2, 2, projection=ccrs.PlateCarree(central_longitude=180)) # 創(chuàng)建1行1列的1個子圖,使用等距網(wǎng)格投影,中心經(jīng)度180° ax2.add_feature(cfeature.COASTLINE) # 添加海岸線 plt.show()3.2
# 繪制蘭伯特投影 # 導(dǎo)入庫 import matplotlib.pyplot as plt # 調(diào)用matplotlib.pyplot模塊,用于調(diào)用基礎(chǔ)繪圖函數(shù) import cartopy.crs as ccrs # 調(diào)用cartopy.crs模塊,用于創(chuàng)建投影 import cartopy.feature as cfeature # 調(diào)用cartopy.feature模塊,引入默認地理信息# 創(chuàng)建圖形 fig = plt.figure(figsize=[10, 5]) # 設(shè)置圖片大小10x5 ax1 = fig.add_subplot(1, 1, 1, projection=ccrs.LambertConformal(central_longitude=120, cutoff=20)) # 創(chuàng)建蘭伯特投影子圖 ax1.add_feature(cfeature.COASTLINE) # 添加海岸線 gl = ax1.gridlines(draw_labels=True,dms=True,x_inline=False,y_inline=False) # 添加網(wǎng)格線 gl.top_labels = False # 通過對gridliner對象,這里即為gl變量進行設(shè)置,關(guān)閉頂部標(biāo)簽 plt.show()3.3
# 基礎(chǔ)北極、南極極地投影繪制 # 導(dǎo)入庫 import matplotlib.pyplot as plt # 調(diào)用matplotlib.pyplot模塊,用于調(diào)用基礎(chǔ)繪圖函數(shù) import cartopy.crs as ccrs # 調(diào)用cartopy.crs模塊,用于創(chuàng)建投影fig = plt.figure(figsize=[10, 5]) # 設(shè)置圖片大小10x5# 北極極地投影 # 創(chuàng)建1行2列的1個子圖,使用北極地投影 ax1 = fig.add_subplot(1, 2, 1, projection=ccrs.NorthPolarStereo()) ax1.add_feature(cfeature.COASTLINE) # 添加海岸線 gl1 = ax1.gridlines(draw_labels=True, x_inline=False, y_inline=True) # 添加網(wǎng)格柵格線 ax1.set_title('NorthPolarStereo')# 南極極地投影 # 創(chuàng)建1行2列的1個子圖,使用南極地投影 ax2 = fig.add_subplot(1, 2, 2, projection=ccrs.SouthPolarStereo()) ax2.add_feature(cfeature.COASTLINE) # 添加海岸線 gl2 = ax2.gridlines(draw_labels=True, x_inline=False, y_inline=True) # 添加網(wǎng)格柵格線 ax2.set_title('SouthPolarStereo') plt.show()總結(jié)
以上是生活随笔為你收集整理的Python Cartopy地图投影【2】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于windows上的exe可执行程序在
- 下一篇: [转帖]Docker 清理占用的磁盘空间