使用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()
如您所见,平行线是点之间的一系列直线段。每条线上的点不足以使它们显得平滑。如何使平行线更圆?
答案 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。
示例输出: