假设我需要用Cartopy绘制一个Map,生成的图形应该是正方形的。在我(过于简单)的理解中,使用plate carrée projection应该很容易,因为经度和纬度直接用作平面坐标。这意味着如果经度和纬度覆盖的范围相同,我希望得到一个正方形的Map。
然而,如果范围从赤道开始(例如[-120, -60, 0, 60]
),下面的代码可以工作,但如果范围远离赤道,它就失败了。如何计算范围,以使生成的Map是一个正方形?(我找到了this post,但它没有真正的帮助,因为坐标转换只返回给定的坐标)。
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=[5, 5], subplot_kw={'projection': ccrs.PlateCarree()})
fig.subplots_adjust(left=0.0, bottom=0.0, right=1.0, top=1.0)
ax.set_extent([-120, -60, 15, 75])
ax.stock_img()
fig.savefig('Test.pdf')
下图显示了输出,但遗憾的是,输出的垂直边缘包含白色边框:
1条答案
按热度按时间tzcvj98z1#
这会是所选投影的属性吗?通过检查
ax._position
、ax._originalPosition
属性,您可以在添加转换时看到它的发生:你可以添加
ax.set_adjustable('datalim')
来改变限制,而不是用方框来填充给定的范围。注意这是如何稍微改变ax.get_xlim()
和ax.get_ylim()
的,所以要确保这是你的应用程序可以接受的。我个人经常在保存时显式添加dpi和bbox,以确保输出具有预期的尺寸,见下面的例子。当我使用不同的投影时,我可以让它直接工作,下面的代码生成了一个干净的500x500px图像,在输出中只有轴可见,红色的图形不可见,所以这可能是PlateCarree投影的一个属性?