Dernière fois a expliqué comment créer un environnement pour faire fonctionner les fichiers grib2 à partir de python. Cette fois, les données lues. Je vais vous présenter la méthode de visualisation avec matplotlib + basemap. Je n'expliquerai pas Jupyter en particulier, mais j'essaye essentiellement sur Jupyter (je pense qu'il est normal d'utiliser les commandes python comme d'habitude).
Dans l'environnement Anaconda
apt-get -y install libgl-dev
conda install matplotlib
conda install basemap
Vous pouvez installer matplotlib et Basemap avec.
La place d'apt-get change en fonction de l'environnement, mais si vous ne l'avez pas, on vous dira que libGL.so n'existe pas lors de l'importation de matplotlib.
Dans le cas du docker, c'est OK si vous ajoutez RUN
au début de chaque ligne ci-dessus au Dockerfile précédent.
Dockerfile
...Ajoutez ce qui suit...
RUN apt-get -y install libgl-dev
RUN conda install matplotlib
RUB conda install basemap
Utilisez le pygrib décrit la dernière fois pour lire les données grib. Utilisez le même échantillon que la dernière fois.
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
À partir de là, nous travaillerons avec python. Lorsque vous travaillez avec docker, démarrez le conteneur ci-dessous et démarrez python comme auparavant.
cd path_of_Dokcerfile
docker build -t pygrib_ubuntu .
docker run -it -v /somepath:/temp pygrib_ubuntu
import matplotlib
matplotlib.use('Agg') #S'il n'y a pas d'environnement x sur le serveur, matplotlib ne fonctionnera pas sans cela
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')
#Élément spécifié par la méthode de sélection(forecastTime=0)Renvoie un tableau d'éléments qui correspondent.
# forecastTime=Il y a plusieurs éléments de 0, mais le début([0])La pression de réhabilitation de la surface de la mer(mslp)Est inclus
grb = grbs.select(forecastTime=0)[0]
# lats,lons est un tableau à deux dimensions avec latitude et longitude
lats, lons = grb.latlons()
#Données contenues dans(Pression de réhabilitation de la surface de la mer)Avec un ndarray bidimensionnel
mslp = grb.values
Avec cela, nous avons pu extraire la latitude et la longitude et les données à ce point (pression de réhabilitation de la surface de la mer) nécessaires pour la visualisation à partir du grib.
Ensuite, je dessinerai des lignes isobares comme une carte météo.
#Énumérer les intervalles auxquels les lignes isobares sont dessinées en niveaux
#L'unité de MSLP est Pa, donc si vous tracez une ligne tous les 2hPa, vous tracerez une ligne tous les 200.
levels = range(math.floor(mslp.min()/100)*100, math.ceil(mslp.max()/100)*100+1,200)
# lat,Convertir le sol en une dimension
#Pour une raison quelconque, il ne peut pas être dessiné en deux dimensions
flat_lats= np.ravel(lats)
flat_lons= np.ravel(lons)
fig = plt.figure()
#Créez une carte. 4 paramètres spécifient la plage à dessiner
m = Basemap(llcrnrlat=lats.min(),urcrnrlat=lats.max(), llcrnrlon=lons.min(),urcrnrlon=lons.max())
#Tracer des lignes isobares
m.contour(flat_lons, flat_lats,mslp,latlon=True,tri=True,levels=levels)
#Dessinez le littoral
m.drawcoastlines()
fig.savefig('/temp/mslp.png')
L'image est terminée comme ça.
Les avertissements suivants apparaîtront au moment de la sortie, mais pour le moment, cela ne l'affectera pas, alors ne nous en inquiétons pas.
/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