@@ -844,9 +844,22 @@ def _axes_domain(self, *args, **kwargs):
844844 lon_0 = self .axes .projection .proj4_params .get ('lon_0' , 0 )
845845 x_range = np .asarray (x_range ) + lon_0
846846 return x_range , y_range
847+ # Cartopy >= 0.18 monkey patch. Fixes issue where cartopy draws an overlapping
848+ # dateline gridline (e.g. polar maps). See the nx -= 1 line in _draw_gridliner
849+ def _draw_gridliner (self , * args , ** kwargs ): # noqa: E306
850+ result = type (self )._draw_gridliner (self , * args , ** kwargs )
851+ if _version_cartopy >= '0.18' :
852+ lon_lim , _ = self ._axes_domain ()
853+ if abs (np .diff (lon_lim )) == abs (np .diff (self .crs .x_limits )):
854+ for collection in self .xline_artists :
855+ if not getattr (collection , '_cartopy_fix' , False ):
856+ collection .get_paths ().pop (- 1 )
857+ collection ._cartopy_fix = True
858+ return result
847859 # Return the gridliner with monkey patch
848860 gl = self .gridlines (crs = ccrs .PlateCarree ())
849861 gl ._axes_domain = _axes_domain .__get__ (gl )
862+ gl ._draw_gridliner = _draw_gridliner .__get__ (gl )
850863 gl .xlines = gl .ylines = False
851864 self ._toggle_gridliner_labels (gl , False , False , False , False , False )
852865 return gl
0 commit comments