如何使用 matplotlib 在 cartopy 极地立体图中获得平滑的网格线?
How do I get smooth gridlines in cartopy polar stereographic plots with matplotlib?
使用 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()
如您所见,纬线是点之间的一系列直线段。每条线上没有足够的点来使它们看起来平滑。我怎样才能使平行线更圆?
这是因为默认阈值对于此用例来说太大了。这不是 Cartopy 投影界面的 user-controllable 部分。您可以使用私有 _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
class 的实现细节,最好在 Cartopy 中对此进行更好的设置。使用此用例在 Cartopy Github 存储库上开一张票将是一个好的开始 https://github.com/SciTools/cartopy/issues.
问:如何使平行线更圆?
答:您需要 gridlines()
创建的 gridliner
对象的 n_steps
属性 的更大值。它的默认值为30。这里是将值设置为90的相关代码,并生成更好的绘图。
gl = ax.gridlines(draw_labels=False, xlocs=None, ylocs=None)
gl.n_steps = 90
参见参考资料 here。
示例输出:
使用 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()
如您所见,纬线是点之间的一系列直线段。每条线上没有足够的点来使它们看起来平滑。我怎样才能使平行线更圆?
这是因为默认阈值对于此用例来说太大了。这不是 Cartopy 投影界面的 user-controllable 部分。您可以使用私有 _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
class 的实现细节,最好在 Cartopy 中对此进行更好的设置。使用此用例在 Cartopy Github 存储库上开一张票将是一个好的开始 https://github.com/SciTools/cartopy/issues.
问:如何使平行线更圆?
答:您需要 gridlines()
创建的 gridliner
对象的 n_steps
属性 的更大值。它的默认值为30。这里是将值设置为90的相关代码,并生成更好的绘图。
gl = ax.gridlines(draw_labels=False, xlocs=None, ylocs=None)
gl.n_steps = 90
参见参考资料 here。
示例输出: