Cartopy理解变换和投影关键字
翻譯一下官網說明,為了幫助和我一樣英語不好的人。
 Understanding the transform and projection keywords — cartopy 0.20.0 documentation
很容易混淆投影和變換關鍵字參數的實際含義。在這里,我們將使用一些簡單的例子來說明每種方法的效果。
核心概念是子圖(或軸?zxes)的投影獨立于定義數據的坐標系。“投影”參數用于創建繪圖并確定結果繪圖的投影(即繪圖的外觀)。plotting函數的transform參數告訴Cartopy數據在哪個坐標系中定義。
首先,我們將創建一些在常規緯度/經度網格上定義的虛擬數據:
import numpy as nplon = np.linspace(-80, 80, 25) lat = np.linspace(30, 70, 25) lon2d, lat2d = np.meshgrid(lon, lat)data = np.cos(np.deg2rad(lat2d) * 4) + np.sin(np.deg2rad(lon2d) * 4)讓我們嘗試在PlateCarree投影中繪制一個圖,而不指定transform參數。由于數據恰好是在我們正在繪制的同一坐標系中定義的,因此這實際上是正確的:
import cartopy.crs as ccrs import matplotlib.pyplot as plt# The projection keyword determines how the plot will look plt.figure(figsize=(6, 3)) ax = plt.axes(projection=ccrs.PlateCarree()) ax.set_global() ax.coastlines()ax.contourf(lon, lat, data) # didn't use transform, but looks ok... plt.show()?下面我們加入?transform關鍵字:
# The data are defined in lat/lon coordinate system, so PlateCarree() # is the appropriate choice: data_crs = ccrs.PlateCarree()# The projection keyword determines how the plot will look plt.figure(figsize=(6, 3)) ax = plt.axes(projection=ccrs.PlateCarree()) ax.set_global() ax.coastlines()ax.contourf(lon, lat, data, transform=data_crs) plt.show()?
?看到畫的圖沒有改變嗎?這是因為未提供transform參數時的默認假設是坐標系與投影匹配,到目前為止一直如此。
現在,我們將再次嘗試此操作,但對繪圖使用不同的投影。我們將繪制到旋轉的極點投影上,我們將省略transform參數以查看發生了什么:
# Now we plot a rotated pole projection projection = ccrs.RotatedPole(pole_longitude=-177.5, pole_latitude=37.5) plt.figure(figsize=(6, 3)) ax = plt.axes(projection=projection) ax.set_global() ax.coastlines()ax.contourf(lon, lat, data) # didn't use transform, uh oh! plt.show()?結果圖不正確!我們沒有告訴Cartopy我們的數據是在什么坐標系中定義的,所以它假設它與我們正在繪制的投影相同,并且數據繪制在錯誤的位置。
我們可以通過提供transform參數來解決此問題,該參數與以前相同,因為數據的坐標系沒有更改:
# A rotated pole projection again... projection = ccrs.RotatedPole(pole_longitude=-177.5, pole_latitude=37.5) data_crs = ccrs.PlateCarree() plt.figure(figsize=(6, 3)) ax = plt.axes(projection=projection) ax.set_global() ax.coastlines()# ...but now using the transform argument ax.contourf(lon, lat, data, transform=data_crs) plt.show()最安全的做法是始終提供transform關鍵字,而不考慮使用的投影,并避免讓Cartopy對數據的坐標系進行假設。這樣做允許您為繪圖選擇任何地圖投影,并允許Cartopy在數據應位于的位置繪制數據:
# We can choose any projection we like... projection = ccrs.InterruptedGoodeHomolosine() plt.figure(figsize=(6, 7)) ax1 = plt.subplot(211, projection=projection) ax1.set_global() ax1.coastlines() ax2 = plt.subplot(212, projection=ccrs.NorthPolarStereo()) ax2.set_extent([-180, 180, 20, 90], crs=ccrs.PlateCarree()) ax2.coastlines()# ...as long as we provide the correct transform, the plot will be correct ax1.contourf(lon, lat, data, transform=data_crs) ax2.contourf(lon, lat, data, transform=data_crs) plt.show()?
?
總結
以上是生活随笔為你收集整理的Cartopy理解变换和投影关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: TEXTILEGENESIS纺织品TG追
 - 下一篇: 基于Java毕业设计研究生招生信息管理源