如何使用matplotlib在Cartopy极地立体图中绘制平滑网格线?

时间:2019-07-18 14:17:56

标签: python matplotlib cartopy

使用matplotlib和cartopy的NorthPolarStereo投影进行绘制时,恒定纬度网格线(平行线)不是平滑的圆。

这是一个最小的工作示例:

from matplotlib import pyplot
import cartopy.crs

ax = pyplot.axes(projection=cartopy.crs.NorthPolarStereo())
ax.set_extent((-180, 180, 60, 90), crs=cartopy.crs.PlateCarree())
ax.gridlines()

pyplot.show()

enter image description here

如您所见,平行线是点之间的一系列直线段。每条线上的点不足以使它们显得平滑。如何使平行线更圆?

2 个答案:

答案 0 :(得分:1)

这是由于此使用案例的默认阈值太大。这不是Cartopy投影界面的用户可控制的部分。您可以使用私有_threshold属性对其进行破解,将其除以100看起来对您的用例而言是合理的:

from matplotlib import pyplot
import cartopy.crs

hacked_proj = cartopy.crs.NorthPolarStereo()
hacked_proj._threshold /= 100.
ax = pyplot.axes(projection=hacked_proj)
ax.set_extent((-180, 180, 60, 90), crs=cartopy.crs.PlateCarree())
ax.gridlines()

pyplot.show()

这不是一个很好的解决方案,因为它使用了Stereographic类的实现细节,最好在Cartopy中对此进行更好的设置。使用此用例在Cartopy Github存储库上打开票证将是一个不错的开始https://github.com/SciTools/cartopy/issues

答案 1 :(得分:1)

问:如何使平行线更圆?

A:您需要由n_steps创建的gridliner对象的gridlines()属性的较大值。默认值为30。以下是相关代码,可将值设置为90,并生成更好的图。

gl = ax.gridlines(draw_labels=False, xlocs=None, ylocs=None)
gl.n_steps = 90

请参见参考文献here

示例输出:

enter image description here