Letztes Mal erklärte, wie eine Umgebung zum Betreiben von grib2-Dateien aus Python erstellt wird. Diesmal die gelesenen Daten. Ich werde die Methode der Visualisierung mit matplotlib + Grundkarte vorstellen. Ich werde Jupyter nicht besonders erklären, aber ich versuche es im Grunde auf Jupyter (ich denke, es ist in Ordnung, Python-Befehle wie gewohnt zu verwenden).
In Anaconda Umgebung
apt-get -y install libgl-dev
conda install matplotlib
conda install basemap
Sie können matplotlib und Basemap mit installieren. Der Ort von apt-get ändert sich je nach Umgebung. Ist dies nicht der Fall, wird libGL.so beim Importieren von matplotlib nicht verwendet. Im Fall von Docker ist es in Ordnung, wenn Sie "RUN" am Anfang jeder Zeile über der vorherigen Docker-Datei hinzufügen.
Dockerfile
...Fügen Sie Folgendes hinzu...
RUN apt-get -y install libgl-dev
RUN conda install matplotlib
RUB conda install basemap
Verwenden Sie den zuletzt beschriebenen Pygrib, um die Grib-Daten zu lesen. Verwenden Sie das gleiche Beispiel wie beim letzten Mal.
wget -P somepath/ http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/original/2017/01/02/Z__C_RJTD_20170102000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin
Von hier aus werden wir in Python arbeiten. Wenn Sie mit Docker arbeiten, starten Sie den Container unten und starten Sie Python wie zuvor darin.
cd path_of_Dokcerfile
docker build -t pygrib_ubuntu .
docker run -it -v /somepath:/temp pygrib_ubuntu
import matplotlib
matplotlib.use('Agg') #Wenn auf dem Server keine x-Umgebung vorhanden ist, funktioniert matplotlib ohne diese nicht
import pygrib
import matplotlib.pyplot as plt
import numpy as np
import math
from mpl_toolkits.basemap import Basemap
grbs = pygrib.open('/temp/Z__C_RJTD_20170102000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin')
#Element, das durch die Auswahlmethode angegeben wird(forecastTime=0)Gibt ein Array übereinstimmender Elemente zurück.
# forecastTime=Es gibt mehrere Elemente von 0, aber den Anfang([0])Ist der Meeresoberflächen-Rehabilitationsdruck(mslp)Ist enthalten
grb = grbs.select(forecastTime=0)[0]
# lats,lons ist eine zweidimensionale Anordnung mit Breiten- und Längengraden
lats, lons = grb.latlons()
#Daten enthalten in(Rehabilitationsdruck auf der Meeresoberfläche)Mit einem zweidimensionalen ndarray
mslp = grb.values
Auf diese Weise konnten wir den Breiten- und Längengrad sowie die Daten an diesem Punkt (Rehabilitationsdruck der Meeresoberfläche) extrahieren, die für die Visualisierung aus dem Grib erforderlich sind.
Als nächstes werde ich isobare Linien wie eine Wetterkarte zeichnen.
#Listen Sie die Intervalle auf, in denen isobare Linien in Ebenen gezeichnet werden
#Die Einheit von MSLP ist Pa. Wenn Sie also alle 2 hPa eine Linie zeichnen, zeichnen Sie alle 200 eine Linie.
levels = range(math.floor(mslp.min()/100)*100, math.ceil(mslp.max()/100)*100+1,200)
# lat,Konvertieren Sie lon in eine Dimension
#Aus irgendeinem Grund kann es nicht in zwei Dimensionen gezeichnet werden
flat_lats= np.ravel(lats)
flat_lons= np.ravel(lons)
fig = plt.figure()
#Erstellen Sie eine Karte. 4 Parameter geben den zu zeichnenden Bereich an
m = Basemap(llcrnrlat=lats.min(),urcrnrlat=lats.max(), llcrnrlon=lons.min(),urcrnrlon=lons.max())
#Zeichnen Sie isobare Linien
m.contour(flat_lons, flat_lats,mslp,latlon=True,tri=True,levels=levels)
#Zeichnen Sie die Küste
m.drawcoastlines()
fig.savefig('/temp/mslp.png')
Das Bild wird so vervollständigt.
Die folgenden Warnungen werden zum Zeitpunkt der Ausgabe angezeigt, haben jedoch vorerst keine Auswirkungen darauf. Machen wir uns also keine Sorgen.
/root/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py:3505: MatplotlibDeprecationWarning: The ishold function was deprecated in version 2.0.
b = ax.ishold()
/root/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py:3572: MatplotlibDeprecationWarning: axes.hold is deprecated.
See the API Changes document (http://matplotlib.org/api/api_changes.html)
for more details.
ax.hold(b)
Recommended Posts