matplotlib / matplotlib/basemap
zorder of drawmapboundary() gets on top of imshow()
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 817
- Forks
- 395
- Métriques de merge des PR
- Aucune PR mergée en 30 j
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
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Utilisez le reproducteur plotBmap fourni avec Basemap 1.2.0 et Matplotlib 2.2.3, puis comparez son comportement avec celui de Basemap 1.0.7. Commencez par suivre drawmapboundary(), drawparallels() et drawmeridians() lorsqu’ils créent des artists et des z-orders. Le travail est terminé lorsque drawmapboundary(fill_color='0.8') ne recouvre pas imshow(), quel que soit l’ordre des appels.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- data-visualization
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100