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