【问题标题】:How to plot Lon/Lat values at the border of a orthographic cartopy plot?如何在正交图的边界绘制 Lon/Lat 值?
【发布时间】:2019-10-23 13:58:54
【问题描述】:

我在cartopy中使用了一些南极洲轮廓的shapefile数据,这很好用。我可以用 shapefile 和一些更多的信息生成一个图。但我无法在图像的边界绘制经度和​​纬度信息。

我使用正射投影与central_longitude 和central_latitude。

我还需要提一下,我对 cartopy 比较陌生。

我的代码:

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.io.shapereader import Reader

# 01

b01e01_lat = -73.86750000
b01e01_lon = -60.22694444
b01e02_lat = -73.89166667
b01e02_lon = -56.68500000
b01e03_lat = -74.87222222
b01e03_lon = -58.26805556
b01e04_lat = -74.85000000
b01e04_lon = -60.43083333
b01e05_lat = -73.86750001
b01e05_lon = -60.22694445

b01_lat = np.array([b01e01_lat,b01e02_lat,b01e03_lat,b01e04_lat, b01e01_lat, b01e05_lat])
b01_lon = np.array([b01e01_lon,b01e02_lon,b01e03_lon,b01e04_lon, b01e01_lon, b01e05_lon])

# 02

b02e01_lat = -73.94555556
b02e01_lon = -51.00055556
b02e02_lat = -74.22333333
b02e02_lon = -49.37000000
b02e03_lat = -74.87555556
b02e03_lon = -50.71888889
b02e04_lat = -74.87583333
b02e04_lon = -51.00055556
b02e05_lat = -73.94555557
b02e05_lon = -51.00055557

fname='Coastline_Antarctica_v02.shp'
#ax = plt.axes(projection=ccrs.SouthPolarStereo())
plt.figure()
ax = plt.axes(projection=ccrs.Orthographic(central_longitude=-41, 
                                              central_latitude=-71))
ax.set_extent([-85,-12,-75,-60], crs=ccrs.PlateCarree())
ax.add_geometries(Reader(fname).geometries(),ccrs.Orthographic(central_longitude=-0, 
                                              central_latitude=-90), color='grey')
ax.gridlines()

plt.plot(b01_lon,b01_lat, color='r', transform=ccrs.PlateCarree())
plt.plot(b02_lon,b02_lat, color='r', transform=ccrs.PlateCarree())

plt.show()

有了这个,我得到以下图(没有蓝色形状):

任何帮助表示赞赏!

【问题讨论】:

  • 你的问题到底是什么?
  • 也许这个答案对你有帮助:stackoverflow.com/a/29488744/11738630
  • 如果您正在寻找的是标记纬度/经度网格线,那么该功能目前仅适用于主分支上的所有投影。这应该在下一个版本中可用。
  • @DopplerShift - 是的,我读到了这个......它实际上不适用于这个投影......但我认为可能有人以某种方式解决了它
  • @Mara 对我的回答有何评论?

标签: python-3.x cartopy


【解决方案1】:

如果您运行代码来生成交互式绘图(在 jupyter 笔记本上使用 %matplotlib notebook),您可以移动鼠标光标来读取您需要绘制标签的位置。

使用这种方法,我可以获得绘制 2 个样本标签的大致(经度、纬度)位置。绘制它们的代码如下:

ax.text(-80.6, -57.0, '{0}\N{DEGREE SIGN} S '.format(57), va='center', ha='right',
                           transform=ccrs.PlateCarree())

ax.text(-75.15, -56.0, '{0}\N{DEGREE SIGN} W '.format(75), va='bottom', ha='center',
                           transform=ccrs.PlateCarree())

输出图将如下所示:

【讨论】:

  • 感谢您的回答 - 这看起来是一个很好的解决方法。抱歉,我没有早点回复。我有点切换回底图
猜你喜欢
  • 2013-11-13
  • 2021-12-26
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多