在 Python Cartopy 地图中突出显示地点
Highlight places in Python Cartopy maps
我仍然对 Cartopy 的某些方面感到困惑。我不明白为什么有些指令不起作用...例如,如果我想绘制一张英国地图,我可以使用下面的程序,我得到了我的地图。
我知道 Orthographic
投影使用度数表示经度和纬度,所以我设置 extent = [-6.5, 3.5, 49.5, 59.0]
来限制我的地图,其中 -6.5
表示东经 6.5°
3.5
表示西经3.5°
等
为此,如果我想在地图上突出显示格林威治,我想我必须首先定义它的坐标:Greenwich_lon, Greenwich_lat = 0.0, 51.0
,然后绘制这些坐标:ax.plot(Greenwich_lon, Greenwich_lat, marker='x', markersize=12, color='red')
。
但这让我在地图上找到了一个完全在之外的正确位置!
为什么会这样?它来自不合适的ax.plot
吗?是不是来自参数Greenwich_lon
和Greenwich_lat
在ax.plot
中的定位(我把它们颠倒了,但没有改变)?它是否来自 ax.plot
中缺少的某些指令?它来自使用的投影系统吗?
在哪里可以找到简单明了的解释和示例?我知道 Cartopy 有一个庞大的文档 here,但它是如此之大,以至于我迷失得比什么都重要......
import matplotlib.pyplot as plt
import cartopy
import cartopy.feature as cf
import cartopy.crs as ccrs
import numpy as np
plt.figure(figsize=(8, 8))
extent = [-6.5, 3.5, 49.5, 59.0]
central_lon = np.mean(extent[:2])
central_lat = np.mean(extent[2:])
proj = ccrs.Orthographic(central_lon, central_lat)
ax = plt.axes(projection=proj)
ax.set_extent(extent)
ax.gridlines()
border = cf.NaturalEarthFeature(
'cultural', 'admin_0_boundary_lines_land', scale='110m')
land = cf.NaturalEarthFeature(
'physical', 'land', scale='110m',
edgecolor='black', facecolor=cfeature.COLORS['land'])
ocean = cf.NaturalEarthFeature(
'physical', 'ocean', scale='110m',
edgecolor='none', facecolor=cfeature.COLORS['water'])
ax.add_feature(border)
ax.add_feature(land)
ax.add_feature(ocean)
Greenwich_lon, Greenwich_lat = 0.0, 51.0
ax.plot(Greenwich_lon, Greenwich_lat, marker='x', markersize=12, color='red')
plt.show()
Cartopy 始终在 projection
坐标中绘制(与 Matplotlib 中的 data
坐标相同)。通常,它接受大多数投影坐标中的输入数据,并带有指定数据所基于的坐标系的选项。
您有责任使用正确的值和附带的选项。
例如,如果 XXXX() 是您的数据所基于的地图投影坐标,
.set_extent(lon_min, lon_max, lat_min, lat_max, crs=cartopy.crs.XXXX())
.plot(lon, lat, marker'x', transform=cartopy.crs.XXXX())
如果您使用 lat/long 度数,您可以使用 PlateCarree() 代替上面的 XXXX()。
但是,出于方便的原因,.set_extent() 将 crs=cartopy.crs.PlateCarree() 作为您通常忽略的默认选项。
有关坐标系和变换的更多信息:
卡托比
https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html
由于 Cartopy 是建立在 Matplotlib 之上的,因此您需要查看 Matplotlib 中的相关主题。
Matplotlib
https://matplotlib.org/3.2.1/tutorials/advanced/transforms_tutorial.html
我仍然对 Cartopy 的某些方面感到困惑。我不明白为什么有些指令不起作用...例如,如果我想绘制一张英国地图,我可以使用下面的程序,我得到了我的地图。
我知道 Orthographic
投影使用度数表示经度和纬度,所以我设置 extent = [-6.5, 3.5, 49.5, 59.0]
来限制我的地图,其中 -6.5
表示东经 6.5°
3.5
表示西经3.5°
等
为此,如果我想在地图上突出显示格林威治,我想我必须首先定义它的坐标:Greenwich_lon, Greenwich_lat = 0.0, 51.0
,然后绘制这些坐标:ax.plot(Greenwich_lon, Greenwich_lat, marker='x', markersize=12, color='red')
。
但这让我在地图上找到了一个完全在之外的正确位置!
为什么会这样?它来自不合适的ax.plot
吗?是不是来自参数Greenwich_lon
和Greenwich_lat
在ax.plot
中的定位(我把它们颠倒了,但没有改变)?它是否来自 ax.plot
中缺少的某些指令?它来自使用的投影系统吗?
在哪里可以找到简单明了的解释和示例?我知道 Cartopy 有一个庞大的文档 here,但它是如此之大,以至于我迷失得比什么都重要......
import matplotlib.pyplot as plt
import cartopy
import cartopy.feature as cf
import cartopy.crs as ccrs
import numpy as np
plt.figure(figsize=(8, 8))
extent = [-6.5, 3.5, 49.5, 59.0]
central_lon = np.mean(extent[:2])
central_lat = np.mean(extent[2:])
proj = ccrs.Orthographic(central_lon, central_lat)
ax = plt.axes(projection=proj)
ax.set_extent(extent)
ax.gridlines()
border = cf.NaturalEarthFeature(
'cultural', 'admin_0_boundary_lines_land', scale='110m')
land = cf.NaturalEarthFeature(
'physical', 'land', scale='110m',
edgecolor='black', facecolor=cfeature.COLORS['land'])
ocean = cf.NaturalEarthFeature(
'physical', 'ocean', scale='110m',
edgecolor='none', facecolor=cfeature.COLORS['water'])
ax.add_feature(border)
ax.add_feature(land)
ax.add_feature(ocean)
Greenwich_lon, Greenwich_lat = 0.0, 51.0
ax.plot(Greenwich_lon, Greenwich_lat, marker='x', markersize=12, color='red')
plt.show()
Cartopy 始终在 projection
坐标中绘制(与 Matplotlib 中的 data
坐标相同)。通常,它接受大多数投影坐标中的输入数据,并带有指定数据所基于的坐标系的选项。
您有责任使用正确的值和附带的选项。 例如,如果 XXXX() 是您的数据所基于的地图投影坐标,
.set_extent(lon_min, lon_max, lat_min, lat_max, crs=cartopy.crs.XXXX())
.plot(lon, lat, marker'x', transform=cartopy.crs.XXXX())
如果您使用 lat/long 度数,您可以使用 PlateCarree() 代替上面的 XXXX()。 但是,出于方便的原因,.set_extent() 将 crs=cartopy.crs.PlateCarree() 作为您通常忽略的默认选项。
有关坐标系和变换的更多信息:
卡托比 https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html 由于 Cartopy 是建立在 Matplotlib 之上的,因此您需要查看 Matplotlib 中的相关主题。
Matplotlib https://matplotlib.org/3.2.1/tutorials/advanced/transforms_tutorial.html