使用 cartopy Orthographic 和 RotatedPole 将经度偏移 180 度
longitude off by 180 degrees with cartopy Orthographic and RotatedPole
我试图将北极的蓝点放置在本初子午线(经度=0)下方,但看到这些点却沿着日期变更线(经度=180)向下移动。
代码:
#!/usr/bin/env python
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
Lon = 0
ax = plt.axes( projection=ccrs.Orthographic( central_latitude=70,
central_longitude=Lon) )
ax.set_global()
vector_crs = ccrs.RotatedPole( pole_latitude=90, pole_longitude=Lon )
ax.plot([Lon, Lon, Lon, Lon, Lon, Lon], # longitude
[ 90, 80, 70, 60, 50, 40], # latitude
'bo', markersize=5, transform=vector_crs)
ax.stock_img()
plt.show()
可能与转换有关,但我还没弄清楚是什么。 Cartopy 版本 0.14.2,Python 3.6.
我认为问题出在您定义的变换投影上:
ax = plt.axes(projection=vector_crs)
ax.coastlines()
plt.show()
请注意,变换投影中的这个简单的海岸线图看起来像中心经度为 180° 的 Plate Carree 图。考虑到这一点,让我们看一下使用 Plate Carree 投影在绘图上绘制示例数据点,以便也尝试简化您绘制的地图:
ax = plt.axes(projection=ccrs.PlateCarree())
ax.plot([Lon, Lon, Lon, Lon, Lon, Lon],
[ 90, 80, 70, 60, 50, 40],
'bo', markersize=5, transform=vector_crs)
ax.stock_img()
plt.show()
与您的示例一样,这些点并未出现在我们预期的位置。最后,让我们尝试使用 Plate Carree 投影作为将点绘制到正交地图上时的变换:
ax = plt.axes(projection=ccrs.Orthographic(central_latitude=70,
central_longitude=Lon))
ax.set_global()
ax.plot([Lon, Lon, Lon, Lon, Lon, Lon],
[ 90, 80, 70, 60, 50, 40],
'bo', markersize=5, transform=ccrs.PlateCarree())
ax.stock_img()
plt.show()
这似乎提供了更多您正在寻找的情节。
我试图将北极的蓝点放置在本初子午线(经度=0)下方,但看到这些点却沿着日期变更线(经度=180)向下移动。 代码:
#!/usr/bin/env python
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
Lon = 0
ax = plt.axes( projection=ccrs.Orthographic( central_latitude=70,
central_longitude=Lon) )
ax.set_global()
vector_crs = ccrs.RotatedPole( pole_latitude=90, pole_longitude=Lon )
ax.plot([Lon, Lon, Lon, Lon, Lon, Lon], # longitude
[ 90, 80, 70, 60, 50, 40], # latitude
'bo', markersize=5, transform=vector_crs)
ax.stock_img()
plt.show()
可能与转换有关,但我还没弄清楚是什么。 Cartopy 版本 0.14.2,Python 3.6.
我认为问题出在您定义的变换投影上:
ax = plt.axes(projection=vector_crs)
ax.coastlines()
plt.show()
请注意,变换投影中的这个简单的海岸线图看起来像中心经度为 180° 的 Plate Carree 图。考虑到这一点,让我们看一下使用 Plate Carree 投影在绘图上绘制示例数据点,以便也尝试简化您绘制的地图:
ax = plt.axes(projection=ccrs.PlateCarree())
ax.plot([Lon, Lon, Lon, Lon, Lon, Lon],
[ 90, 80, 70, 60, 50, 40],
'bo', markersize=5, transform=vector_crs)
ax.stock_img()
plt.show()
与您的示例一样,这些点并未出现在我们预期的位置。最后,让我们尝试使用 Plate Carree 投影作为将点绘制到正交地图上时的变换:
ax = plt.axes(projection=ccrs.Orthographic(central_latitude=70,
central_longitude=Lon))
ax.set_global()
ax.plot([Lon, Lon, Lon, Lon, Lon, Lon],
[ 90, 80, 70, 60, 50, 40],
'bo', markersize=5, transform=ccrs.PlateCarree())
ax.stock_img()
plt.show()
这似乎提供了更多您正在寻找的情节。