【问题标题】:Cartopy plot high/low sea level pressure on mapCartopy 在地图上绘制高/低海平面压力
【发布时间】:2018-08-06 23:51:10
【问题描述】:

我正在从底图迁移到 cartopy。我想做的一件事是在地图上绘制高/低压,例如在底图中。这个页面上有一个很好的例子来说明如何做到这一点:https://matplotlib.org/basemap/users/examples.html(“绘制带有高点和低点标签的海平面压力天气图”)。我不打算从这个站点复制和粘贴代码,但想知道如何在 cartopy 中做同样的事情。我无法理解的主要事情是如何在cartopy中做m.xmax and x > m.xmin and y < m.ymax and y > m.ymin(我想像某种矢量变换。

我仔细看了看,并没有看到这个特定的例子被翻译成与 cartopy 兼容的东西。欢迎任何帮助!

【问题讨论】:

  • 您链接到的页面包含 10 个示例。您是否要求将它们全部翻译成 cartopy?
  • 不,抱歉,只是“绘制带有高点和低点标签的海平面气压天气图”脚本
  • 有问题的行正在过滤掉不在投影地图域中的点,因此您可以使用 Cartopy 轴的 get_extent() 方法来确定该域(或者您可以进行初始实现不打扰过滤)。
  • 谢谢安德鲁!你知道这个例子是否会出现在 Cartopy 中吗?我知道还有一些人想知道将来如何使用 Cartopy 在地图上绘制低点和高点。scitools.org.uk/cartopy/docs/v0.15/gallery.html
  • 从坐标转换为网格空间时,我不确定在 Cartopy 中 x,y = m(x,y) 的等价物是什么 - 当我尝试 transform_points() 时它会引发错误。 x, y = np.meshgrid(LON, LAT) ; x, y = CRS.transform_points(ccrs.PlateCarree(),x, y),要求 3 个位置参数 (?)

标签: matplotlib matplotlib-basemap cartopy


【解决方案1】:

要使用 cartopy 编写等效程序,您需要能够翻译两个概念。首先是找到投影的范围,这可以通过GeoAxesget_extent() 方法来完成:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

my_proj = ccrs.Miller(central_longitude=180)
ax = plt.axes(projection=my_proj)
xmin, xmax, ymin, ymax = ax.get_extent()

还需要将坐标点从地理坐标转换为投影坐标,这是坐标参考系实例的transform_points()方法的功能:

import numpy as np

lons2d, lats2d = np.meshgrid(lons, lats) # lons lats are in degrees
transformed = my_proj.transform_points(ccrs.Geodetic(), lons2d, lats2d)
x = transformed[..., 0]  # lons in projection coordinates
y = transformed[..., 1]  # lats in projection coordinates

现在您可以使用与底图示例中相同的技术来过滤和绘制点,而不是 m.xmin 您使用 xmin 等。

当然还有其他替代方法,它们相对于底图示例各有利弊。如果你想出一些好的东西,你可以把它贡献给 Cartopy 画廊。

【讨论】:

  • 太好了,谢谢! transformed = my_proj.transform_points(ccrs.Geodetic, lons2d, lats2d) 线是我一直坚持的,现在正在工作。
猜你喜欢
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多