Lors du dessin d'une carte avec cartopy 0.18.0 ou antérieur, il y avait des problèmes tels que l'étiquette d'axe ne prenant en charge que la projection cylindrique à distance régulière et la projection UTM, et le format de l'étiquette d'axe étant suspect. J'ai écrit cet article sur le réglage de l'étiquette de l'axe auparavant, mais cette fois, la fonction de réglage autour de l'axe de la cartopie a été considérablement améliorée, donc l'axe est très concis. Vous pouvez maintenant écrire des étiquettes.
Dans cet article, nous utiliserons les dernières fonctionnalités de la cartographie pour tracer une carte avec des étiquettes d'axe ajustées.
python=3.7 numpy=1.18.1 cartopy=0.18.0 matplotlib=3.2.1 jupyterlab=2.1.1 J'ai lancé et exécuté un environnement virtuel sur Anaconda.
(En passant, j'avais l'habitude d'utiliser Jupyter Notebook, mais maintenant je suis conscient de l'utilité de Jupyterlab, alors j'ai déménagé.)
#In[1]
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np
#In[2]
fig=plt.figure(figsize=(10,5),facecolor='w')
ax=fig.add_subplot(1,1,1,projection=ccrs.PlateCarree(central_longitude=180))
ax.coastlines()
ax.set_global()
ax.gridlines(draw_labels=True)
Out[2]
Vous pouvez dessiner une grille sur la carte avec ʻax.gridlines () . À ce stade, les étiquettes des axes peuvent également être affichées en définissant
draw_labels = True`.
Dans la précédente cartopie, il y avait un bug qui chevauchait EW avec la notation à 180 °, mais il semble qu'il ait été corrigé.
Vous pouvez changer la position de la grille en passant un objet itérable avec une grille à xlocs
, ylocs
de ʻax.gridlines () ou
Locator`.
np.arange ()
#In[3]
fig=plt.figure(figsize=(10,5),facecolor='w')
ax=fig.add_subplot(1,1,1,projection=ccrs.PlateCarree(central_longitude=180))
ax.coastlines()
ax.set_global()
ax.gridlines(draw_labels=True,xlocs=np.arange(-180,180.1,60)
,ylocs=np.arange(-90.,90.1,30))
Out[3]
Apparemment, la plage de longitude doit être spécifiée entre -180 et 180.
#In[4]
mloc=plt.MultipleLocator(2.5) #Espacement de grille 2.Générer plusieurs localisateurs à 5 °
fig=plt.figure(figsize=(10,5),facecolor='w')
ax=fig.add_subplot(1,1,1,projection=ccrs.PlateCarree(central_longitude=180))
ax.coastlines(resolution='10m')
ax.gridlines(draw_labels=True,xlocs=mloc,ylocs=mloc,dms=True)
ax.set_extent([125,145,30,45]) #Afficher uniquement au Japon
Out[4]
Si vous passez dms = True
à ʻax.gridlines ()`, vous pouvez afficher les étiquettes des axes en degrés (degrés), minutes (minutes) et secondes (secondes).
Si vous voulez supprimer l'étiquette de l'axe sur la carte, récupérez l'instance cartopy.mpl.gridliner.Gridliner
à partir de la valeur de retour de ʻax.gridlines ()` et réécrivez les propriétés comme suit.
#In[5]
fig=plt.figure(figsize=(10,5),facecolor='w')
ax=fig.add_subplot(1,1,1,projection=ccrs.PlateCarree(central_longitude=180))
ax.coastlines()
ax.set_global()
gl=ax.gridlines(draw_labels=True)
gl.top_labels=False
Out[5]
Comme mentionné ci-dessus, il est maintenant possible d'attacher des étiquettes d'axe en plus de la projection cylindrique à distance régulière et de la projection Mercator.
Ici, dessinons une projection stéréo centrée sur le pôle Sud.
#In[6]
fig=plt.figure(figsize=(8,8),facecolor='w')
ax=fig.add_subplot(1,1,1,projection=ccrs.SouthPolarStereo(central_longitude=180))
ax.coastlines(resolution='50m')
gl=ax.gridlines(draw_labels=True,linestyle='--',xlocs=plt.MultipleLocator(20)
,ylocs=plt.MultipleLocator(15))
gl.xlabel_style={'size':18,'color':'red'}
gl.ylabel_style={'size':18,'color':'green'}
ax.set_extent([-180,180.1,-90,0],ccrs.PlateCarree())
OUT[6]
La taille et la couleur de l'étiquette de l'axe peuvent être ajustées en définissant les valeurs dans gl.xlabel_style
et gl.ylabel_style
dans le dictionnaire.
En utilisant ʻax.gridlines () ʻet l'instance Gridliner
générée avec la mise à jour de cartopy, il n'est plus nécessaire de faire des ajustements fins aux étiquettes d'axe du côté matplotlib. Je pense que c'est devenu très simple à utiliser.
Je voudrais l'ajouter à nouveau lorsque j'ai envie de tracer le diagramme de contour.
Je vous serais reconnaissant si vous pouviez signaler quelque chose d'étrange.
Recommended Posts