-
Notifications
You must be signed in to change notification settings - Fork 398
Open
Description
Hi all,
I got this weird issue that changing the order of drawmapboundary()
wrt drawparallels()
and drawmeridians()
gives different results. Specifically, calling drawmapboundary(fill_color='0.8')
first leads to an overlay of grey over the imshow()
(see left panel in figure). While putting drawmapboundary()
after drawparallels()
and drawmeridians()
gives correct results (right panel in figure).
The script to create that plot:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
def plotBmap(data, x, y, ax, order):
bmap=Basemap(projection='cyl',\
llcrnrlat=y[0],llcrnrlon=x[0],\
urcrnrlat=y[-1],urcrnrlon=x[-1],\
ax=ax)
bmap.imshow(data, interpolation='nearest')
# plot axes labels
lat_labels=np.linspace(-90, 90, 5)
lon_labels=np.linspace(0, 360, 6)
ax.set_yticks(lat_labels)
ax.set_xticks(lon_labels)
ax.tick_params(axis='both',which='major',labelsize=10)
ax.xaxis.set_ticklabels([])
ax.yaxis.set_ticklabels([])
# draw continents
bmap.drawcoastlines(linewidth=1.5,linestyle='solid',color='k',\
antialiased=True)
bmap.drawcountries(linewidth=0.5,linestyle='solid',color='k',\
antialiased=True)
if order=='before':
bmap.drawmapboundary(color='k',linewidth=1.0,fill_color='0.8')
bmap.drawparallels(lat_labels,labels=[1,1,0,0],linewidth=0,\
labelstyle='+/-',fontsize=10)
bmap.drawmeridians(lon_labels,labels=[0,0,0,1],linewidth=0,\
labelstyle='+/-',fontsize=10)
elif order=='after':
bmap.drawparallels(lat_labels,labels=[1,1,0,0],linewidth=0,\
labelstyle='+/-',fontsize=10)
bmap.drawmeridians(lon_labels,labels=[0,0,0,1],linewidth=0,\
labelstyle='+/-',fontsize=10)
bmap.drawmapboundary(color='k',linewidth=1.0,fill_color='0.8')
return bmap
if __name__=='__main__':
x=np.arange(0, 361, 1) # lon
y=np.arange(-90, 91, 1) # lat
X,Y=np.meshgrid(x,y)
z=np.sin(X/90.)+np.cos(Y/90.)
# create an area of missings
z[10:50, 20:80]=np.nan
fig, (ax1, ax2)=plt.subplots(1, 2, figsize=(12,6))
bmap1=plotBmap(z, x, y, ax1, 'before')
ax1.set_title('before')
bmap2=plotBmap(z, x, y, ax2, 'after')
ax2.set_title('after')
fig.show()
I guess it's the zorder that is wrong. specifying zorder=0
in drawmapboundary()
doesn't work, by zordre=-1
does.
The versions of relevant packages:
- basemap = 1.2.0
- matplotlib = 2.2.3
One of the combinations that doesn't have this issue:
- basemap = 1.0.7
- matplotlib = 2.2.3
Activity
[-]order of `drawmapboundary` gives different results[/-][+]zorder of `drawmapboundary()` gets on top of `imshow()`[/+][-]zorder of `drawmapboundary()` gets on top of `imshow()`[/-][+]zorder of drawmapboundary() gets on top of imshow()[/+]WeatherGod commentedon Aug 21, 2019
Xunius commentedon Dec 9, 2019
Hi, I wonder is there any fix being patched, but I noticed something new.
I created a new conda environment and installed basemap = 1.2.0 and matplotlib = 2.2.3. Now setting
zorder=-1
indrawmapboundary()
makes the top and the left hand side black frames gone (see top-right in figure below), as if the fill_color is overlaying the figure frame. Again it seems to be related to the ordering ofdrawmapboundary()
wrtdrawparallels()
anddrawmeridians()
. I've created a new plot to show this:Code below: