Essayez de dessiner une carte avec python + cartopy 0.18.0

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.

environnement d'utilisation

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é.)

Import de bibliothèque

#In[1]
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np

Projection cylindrique à distance régulière

De base

#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]

Out2.png

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é.

Changer la position de la grille

Vous pouvez changer la position de la grille en passant un objet itérable avec une grille à xlocs, ylocs de ʻax.gridlines () ou Locator`.

Utilisez 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]

Out3.png

Apparemment, la plage de longitude doit être spécifiée entre -180 et 180.

Utiliser plusieurs localisateurs

#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]

Out4.png

Si vous passez dms = True à ʻax.gridlines ()`, vous pouvez afficher les étiquettes des axes en degrés (degrés), minutes (minutes) et secondes (secondes).

Effacer l'étiquette d'axe sur la carte

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]

Out5.png

Projection stéréo

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] Out6.png

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.

Résumé

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

Essayez de dessiner une carte avec python + cartopy 0.18.0
Essayez de dessiner une carte avec le package folium de Python
Essayez de dessiner une animation simple en Python
[Python] Dessiner un motif de tourbillon avec une tortue
Essayez le scraping HTML avec la bibliothèque Python
J'ai fait une carte hexadécimale avec Python
Essayez de gratter avec Python.
Dessiner avec Python Tinker
Essayez de dessiner une courbe de vie avec python
Essayez de créer un code de "décryptage" en Python
Essayez de créer un groupe de dièdre avec Python
Visualiser grib2 sur une carte avec python (matplotlib)
Faisons un outil de veille de commande avec python
Essayez de programmer avec un shell!
Essayez la sortie Python avec Haxe 3.2
Faites une loterie avec Python
Essayez d'exécuter Python avec Try Jupyter
Essayez la reconnaissance faciale avec Python
Créer un répertoire avec python
Essayez d'exécuter python dans l'environnement Django créé avec pipenv
[Python] Essayez d'optimiser les paramètres de systole FX avec un algorithme génétique
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
Un exemple pour dessiner des points avec PIL (Python Imaging Library).
[Python] Qu'est-ce qu'une instruction with?
Essayez de gratter avec Python + Beautiful Soup
Résoudre ABC163 A ~ C avec Python
Faites fonctionner l'imprimante de reçus avec python
Manuel de graphisme Python avec Matplotlib.
Faisons une interface graphique avec python.
Essayez d'exploiter Facebook avec Python
Dessiner une courbe Silverstone en utilisant Python
Résoudre ABC166 A ~ D avec Python
Essayez la décomposition de valeurs singulières avec Python
Créer un environnement virtuel avec Python 3
Résoudre ABC168 A ~ C avec Python
Créer un système de recommandation avec python
Essayez la reconnaissance faciale avec python + OpenCV
[Python] Générer un mot de passe avec Slackbot
Résoudre ABC167 A ~ C avec Python
Résoudre ABC158 A ~ C avec Python
Essayez la simulation de contrôle de fréquence avec Python
[Python] Hériter d'une classe avec des variables de classe
J'ai créé un démon avec Python
Dessinez facilement une carte avec matplotlib.basemap
Ecrire un script batch avec Python3.5 ~
Essayez Python
Essayez de créer un environnement python avec Visual Studio Code et WSL
Essayez d'extraire une chaîne de caractères d'une image avec Python3
Essayez d'ajouter un mur à votre fichier IFC avec IfcOpenShell python
[Pyenv] Construire un environnement python avec ubuntu 16.04
[Python] Carte thermique de style calendrier (avec affichage des jours fériés)
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Essayez de reproduire un film couleur avec Python
Créer un décorateur de fonction Python avec Class
Créer un fichier power simple avec Python
[Python] Un programme qui crée des escaliers avec #
Essayez de vous connecter à qiita avec Python