-
Notifications
You must be signed in to change notification settings - Fork 392
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
zorder of drawmapboundary() gets on top of imshow() #474
Comments
drawmapboundary
gives different resultsdrawmapboundary()
gets on top of imshow()
drawmapboundary()
gets on top of imshow()
Fascinating...
I still need to dig into exactly what the code looked like back in v1.0.7,
but one thing I am suspecting is that between then and now, I normalized
the limb-handling code across all of the drawing functions. In particular,
the drawparallels() and drawmeridians() methods would trigger a call to
_cliplimb() now, which exits early if the map boundaries haven't been drawn
yet. But, I don't know how setting clip paths could possibly have an impact
on any of this.
Now, one thing about this is that drawmapboundary() defaults to zorder of
0, so explicitly setting a zorder of zero would have no impact on behavior.
I am going to have to investigate this a bit further to figure out the
cause of the issue.
…On Wed, Aug 21, 2019 at 6:22 AM Xunius ***@***.***> wrote:
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).
[image: basemap]
<https://user-images.githubusercontent.com/8076931/63423894-d2caca80-c43f-11e9-9544-a224c703c007.png>
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
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#474?email_source=notifications&email_token=AACHF6CJSS2VSUZ5ONADI23QFUJMRA5CNFSM4IOE3SP2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4HGPC7RQ>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AACHF6BO7ELAMVNSAQQBU23QFUJMRANCNFSM4IOE3SPQ>
.
|
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 Code below:
|
Hi all,
I got this weird issue that changing the order of
drawmapboundary()
wrtdrawparallels()
anddrawmeridians()
gives different results. Specifically, callingdrawmapboundary(fill_color='0.8')
first leads to an overlay of grey over theimshow()
(see left panel in figure). While puttingdrawmapboundary()
afterdrawparallels()
anddrawmeridians()
gives correct results (right panel in figure).The script to create that plot:
I guess it's the zorder that is wrong. specifying
zorder=0
indrawmapboundary()
doesn't work, byzordre=-1
does.The versions of relevant packages:
One of the combinations that doesn't have this issue:
The text was updated successfully, but these errors were encountered: