transform参数与要打印的数据相关联。在lat/lon中指定直线的起点和终点,因此唯一合理的变换是大地坐标变换和PlateCarree变换。在
当您设置transform=ccrs.Robinson()Cartopy假设您提供的坐标已经在Robinson投影中,而不是在Robinson投影中。本地坐标系中的Robinson投影范围与地理坐标系相比非常大(可能是1e7阶),因此您选择的两个点都非常接近投影的中心,这就是为什么您只看到一个点。在
如果你想在罗宾逊投影上画直线,你就必须用投影坐标来绘制它。这是直接使用Cartopy的变换系统,如下面修改的例子。有关Cartopy的变换/投影关键字如何工作的更多指导,请参见https://scitools.org.uk/cartopy/docs/v0.16/tutorials/understanding_transform.html。在import cartopy.crs as ccrs
import matplotlib.pyplot as plt
ax = plt.axes(projection=ccrs.Robinson())
ax.coastlines()
ax.stock_img()
ad_lat, ad_lon = -34.93, 138.60
liv_lat, liv_lon = 53.41, -2.99
# New bit: transform the given lat/lon points into the Robinson projection
geodetic = ccrs.Geodetic()
robinson = ccrs.Robinson()
ad_lon_t, ad_lat_t = robinson.transform_point(ad_lon, ad_lat, geodetic)
liv_lon_t, liv_lat_t = robinson.transform_point(liv_lon, liv_lat, geodetic)
plt.plot([ad_lon_t, liv_lon_t], [ad_lat_t, liv_lat_t],
color='blue', linewidth=1, marker='o', markersize=3,
# Be explicit about which transform you want:
transform=robinson)
plt.show()