Versuchen Sie, eine Karte mit Python + Cartopy 0.18.0 zu zeichnen

Beim Zeichnen einer Karte mit Cartopy 0.18.0 oder früher traten Probleme auf, z. B. dass die Achsenbeschriftung nur die zylindrische Projektion mit normalem Abstand und die UTM-Projektion unterstützt und das Format der Achsenbeschriftung verdächtig ist. Ich habe diesen Artikel zuvor über das Anpassen der Achsenbeschriftung geschrieben, aber diesmal wurde die Anpassungsfunktion um die Kartuschenachse erheblich verbessert, sodass die Achse sehr präzise ist. Sie können jetzt Etiketten schreiben.

In diesem Artikel verwenden wir die neuesten Funktionen von Cartopy, um eine Karte mit angepassten Achsenbeschriftungen zu zeichnen.

Nutzungsumgebung

python=3.7 numpy=1.18.1 cartopy=0.18.0 matplotlib=3.2.1 jupyterlab=2.1.1 Ich habe eine virtuelle Umgebung auf Anaconda gestartet und ausgeführt.

(Abgesehen davon habe ich früher Jupyter Notebook verwendet, aber jetzt bin ich mir der Nützlichkeit von Jupyterlab bewusst, also bin ich umgezogen.)

Bibliotheksimport

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

Zylinderabstand mit regelmäßigem Abstand

Basic

#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

Sie können mit ax.gridlines () ein Raster auf der Karte zeichnen. Zu diesem Zeitpunkt können die Achsenbeschriftungen auch angezeigt werden, indem "draw_labels = True" gesetzt wird.

In der vorherigen Cartopy gab es einen Fehler, den EW mit der 180 ° -Notation überlappte, aber es scheint, dass er behoben wurde.

Ändern Sie die Position des Gitters

Sie können die Position des Rasters ändern, indem Sie ein iterierbares Objekt mit einem Raster an "xlocs", "ylocs" von "ax.gridlines ()" oder "Locator" übergeben.

Verwenden Sie 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

Anscheinend muss der Längengradbereich im Bereich von -180 bis 180 angegeben werden.

Verwenden Sie Multiple Locator

#In[4]
mloc=plt.MultipleLocator(2.5) #Gitterabstand 2.Generieren Sie mehrere Locator bei 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]) #Nur in Japan anzeigen

Out[4]

Out4.png

Wenn Sie "dms = True" an "ax.gridlines ()" übergeben, können Sie die Achsenbeschriftungen in Grad (Grad), Minuten (Minute) und Sekunden (Sekunde) anzeigen.

Löschen Sie die Achsenbeschriftung auf der Karte

Wenn Sie die Achsenbeschriftung auf der Karte entfernen möchten, rufen Sie die Instanz "cartopy.mpl.gridliner.Gridliner" aus dem Rückgabewert von "ax.gridlines ()" ab und schreiben Sie die Eigenschaften wie folgt neu.

#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

Stereo-Projektion

Wie oben erwähnt, ist es jetzt möglich, Achsenbeschriftungen zusätzlich zu der zylindrischen Projektion mit normalem Abstand und der Mercator-Projektion anzubringen.

Zeichnen wir hier eine Stereoprojektion, die auf den Südpol zentriert ist.

#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

Die Größe und Farbe der Achsenbeschriftung kann angepasst werden, indem die Werte in gl.xlabel_style und gl.ylabel_style im Wörterbuch festgelegt werden.

Zusammenfassung

Durch die Verwendung von "ax.gridlines ()" und der generierten "Gridliner" -Instanz mit dem Cartopy-Update ist es nicht mehr erforderlich, die Achsenbeschriftung auf der Matplotlib-Seite zu optimieren. Ich habe das Gefühl, dass es sehr einfach zu bedienen ist.

Ich möchte es noch einmal hinzufügen, wenn ich das Konturdiagramm zeichnen möchte.

Ich würde es begrüßen, wenn Sie auf etwas Seltsames hinweisen könnten.

Recommended Posts

Versuchen Sie, eine Karte mit Python + Cartopy 0.18.0 zu zeichnen
Versuchen Sie, eine Karte mit Pythons Folium-Paket zu zeichnen
Versuchen Sie, eine einfache Animation in Python zu zeichnen
[Python] Zeichnen eines Wirbelmusters mit einer Schildkröte
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
Ich habe mit Python eine Hex-Map erstellt
Versuchen Sie es mit Python.
Zeichnen mit Python Tinker
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Visualisiere grib2 auf einer Karte mit Python (matplotlib)
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Versuchen Sie, mit einer Shell zu programmieren!
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Machen Sie eine Lotterie mit Python
Versuchen Sie, Python mit Try Jupyter auszuführen
Versuchen Sie die Gesichtserkennung mit Python
Erstellen Sie ein Verzeichnis mit Python
Versuchen Sie, Python in der mit pipenv erstellten Django-Umgebung auszuführen
[Python] Versuchen Sie, die FX-Systolenparameter mit einem genetischen Algorithmus zu optimieren
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
Ein Beispiel zum Zeichnen von Punkten mit PIL (Python Imaging Library).
[Python] Was ist eine with-Anweisung?
Versuchen Sie es mit Python + Beautiful Soup
Löse ABC163 A ~ C mit Python
Bedienen Sie den Belegdrucker mit Python
Python-Grafikhandbuch mit Matplotlib.
Lassen Sie uns eine GUI mit Python erstellen.
Versuchen Sie, Facebook mit Python zu betreiben
Zeichnen einer Silbersteinkurve mit Python
Löse ABC166 A ~ D mit Python
Versuchen Sie die Singularwertzerlegung mit Python
Erstellen einer virtuellen Umgebung mit Python 3
Löse ABC168 A ~ C mit Python
Erstellen Sie ein Empfehlungssystem mit Python
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
[Python] Generiere ein Passwort mit Slackbot
Löse ABC167 A ~ C mit Python
Löse ABC158 A ~ C mit Python
Versuchen Sie die Frequenzsteuerungssimulation mit Python
[Python] Erbt eine Klasse mit Klassenvariablen
Ich habe mit Python einen Daemon erstellt
Zeichnen Sie einfach eine Karte mit matplotlib.basemap
Schreiben Sie ein Batch-Skript mit Python3.5 ~
Versuchen Sie Python
Versuchen Sie, eine Python-Umgebung mit Visual Studio Code & WSL zu erstellen
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
Versuchen Sie, Ihrer IFC-Datei mit IfcOpenShell Python eine Wand hinzuzufügen
[Pyenv] Erstellen einer Python-Umgebung mit Ubuntu 16.04
[Python] Heatmap im Kalenderstil (mit Feiertagsanzeige)
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Erstellen Sie mit Class einen Python-Funktionsdekorator
Erstellen einer einfachen Power-Datei mit Python
[Python] Ein Programm, das Treppen mit # erstellt
Versuchen Sie, sich mit Python bei qiita anzumelden