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.
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.)
#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]
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.
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.
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]
Anscheinend muss der Längengradbereich im Bereich von -180 bis 180 angegeben werden.
#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]
Wenn Sie "dms = True" an "ax.gridlines ()" übergeben, können Sie die Achsenbeschriftungen in Grad (Grad), Minuten (Minute) und Sekunden (Sekunde) anzeigen.
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]
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]
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.
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