Tracez plusieurs cartes et données en même temps avec matplotlib de Python

Lorsque je fais des recherches sur la Terre et la science planétaire, je rencontre souvent une situation où je veux tracer plusieurs cartes et données sur une seule figure en même temps. Cette fois, en utilisant matplotlib de Python,

Le but est que.

1. Tracez plusieurs cartes en même temps

code

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap

xlim = [100, 170]			#Portée de la figure(direction de l'axe x: longitude)
ylim = [10, 60]				#Portée de la figure(direction de l'axe y: latitude)
column = 3					#Le nombre de colonnes
fsizex, fsizey= 16, 18		#Longueur horizontale et verticale de la figure
line_interval = 15			#Espacement entre les lignes de latitude et méridiens tracées sur la carte
fontsize = 20				#taille de police

if 12 % column != 0:
    raise ValueError('column must be a divisor of 12!')

row = 12 / column			#Nombre de rangées
months =  [ 'Jan',  'Feb',  'Mar',  'Apr',
            'May',  'Jun',  'Jul',  'Aug',
            'Sep',  'Oct',  'Nov',  'Dec' ]

fig = plt.figure(figsize = (fsizex, fsizey))
plt.rcParams['font.size'] = fontsize

ax = [0] * 12
for i in range(0, 12):
    ax[i] = fig.add_subplot(row, column, 1 + i)
    m = Basemap(projection = 'cyl', llcrnrlat = ylim[0], urcrnrlat = ylim[1], \
                llcrnrlon = xlim[0], urcrnrlon = xlim[1], resolution = 'c', lon_0 = 180)
    m.drawcoastlines(linewidth = 0.5)
    m.drawmapboundary()
    m.fillcontinents(color = '#eeeeee')
    if i == 12 - column:
        label = [1, 1]
    elif i > 12 - column:
        label = [1, 0]
    elif i % column == 0:
        label = [0, 1]
    else:
        label = [0, 0]

    m.drawmeridians(np.arange(0, 360, line_interval), labels = [0, 0, 0, label[0]], linewidth = 0.5)
    m.drawparallels(np.arange(-90, 90, line_interval), labels = [label[1], 0, 0, 0], linewidth = 0.5)
    ax[i].set_xlim(xlim)
    ax[i].set_ylim(ylim)
    ax[i].set_title(months[i])

fig.tight_layout()
plt.show()

Figure

ダウンロード (12).png

2. Tracez plusieurs cartes et données en même temps

Préparation

Si les graphiques de chaque mois sont des données bidimensionnelles, combinez chaque donnée des 12 mois en un seul tableau tridimensionnel.

xn = 360			#Axe X des données(longitude)Nombre de grilles dans la direction
yn = 155            #Axe Y des données(latitude)Nombre de grilles dans la direction
data = np.zeros((12, yn, xn))
for i in range(0, 12):
	data[i, :, :] = .....  # (i+1)Processus pour obtenir les données mensuelles

De plus, un tableau unidimensionnel correspondant à l'axe x (longitudinal) et à l'axe y (latitude) des données bidimensionnelles est acquis. Cette fois, respectivement

(Les deux sont «numpy.ndarray»).

code

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap

xlim = [100, 170]			#Portée de la figure(direction de l'axe x: longitude)
ylim = [10, 60]				#Portée de la figure(direction de l'axe y: latitude)
column = 3					#Le nombre de colonnes
fsizex, fsizey= 16, 18		#Longueur horizontale et verticale de la figure
cb_min, cb_max = -2, 32     #Barre de couleur minimum / maximum
cb_div = 17					#Nombre de couleurs utilisées dans la barre de couleurs
clabel = 'Sea Surface Temperature(deg)' #Étiquette attachée à la barre de couleur
line_interval = 15						#Espacement entre les lignes de latitude et méridiens tracées sur la carte
fontsize = 20							#taille de police

if 12 % column != 0:
    raise ValueError('column must be a divisor of 12!')

row = 12 / column			#Nombre de rangées
months =  [ 'Jan',  'Feb',  'Mar',  'Apr',
            'May',  'Jun',  'Jul',  'Aug',
            'Sep',  'Oct',  'Nov',  'Dec' ]

fig = plt.figure(figsize = (fsizex, fsizey))
plt.rcParams['font.size'] = fontsize

delta = (cb_max - cb_min) / cb_div
interval_of_cf = np.arange(cb_min, abs(cb_max) * 2 + delta, delta)[0:int(cb_div) + 1]

ax = [0] * 12
for i in range(0, 12):
    ax[i] = fig.add_subplot(row, column, 1 + i)
    m = Basemap(projection = 'cyl', llcrnrlat = ylim[0], urcrnrlat = ylim[1], \
                llcrnrlon = xlim[0], urcrnrlon = xlim[1], resolution = 'c', lon_0 = 180)
    m.drawcoastlines(linewidth = 0.5)
    m.drawmapboundary()
    m.fillcontinents(color = '#eeeeee')
    if i == 12 - column:
        label = [1, 1]
    elif i > 12 - column:
        label = [1, 0]
    elif i % column == 0:
        label = [0, 1]
    else:
        label = [0, 0]

    m.drawmeridians(np.arange(0, 360, line_interval), labels = [0, 0, 0, label[0]], linewidth = 0.5)
    m.drawparallels(np.arange(-90, 90, line_interval), labels = [label[1], 0, 0, 0], linewidth = 0.5)

    #Dessiner un contour de couleur
    x, y = np.meshgrid(xgrid, ygrid)
    X, Y = m(x, y)
    CF = ax[i].contourf(X, Y, data[i, :, :], interval_of_cf)

    ax[i].set_xlim(xlim)
    ax[i].set_ylim(ylim)
    ax[i].set_title(months[i])

#Dessinez une barre de couleur
cax = fig.add_axes([1.00, 0.15, 0.04, 0.7])
cb = fig.colorbar(CF, cax)
cb.set_label(clabel)

fig.tight_layout()
plt.show()

Figure

ダウンロード (13).png

Réussir à créer en toute sécurité. La combinaison de vertical et horizontal peut être librement modifiée en changeant la valeur de la colonne.

** URL de référence **

http://seesaawiki.jp/met-python/d/matplotlib/plot http://bicycle1885.hatenablog.com/entry/2014/02/14/023734 http://nm-player.blogspot.jp/2012/09/matplotlibbasemap-1.html http://qiita.com/AnchorBlues/items/0dd1499196670fdf1c46

Recommended Posts

Tracez plusieurs cartes et données en même temps avec matplotlib de Python
J'ai essayé la même analyse de données avec kaggle notebook (python) et PowerBI en même temps ②
J'ai essayé la même analyse de données avec kaggle notebook (python) et PowerBI en même temps ①
Conversion de type de plusieurs colonnes de pandas DataFrame avec un type en même temps
Transformez plusieurs listes avec l'instruction for en même temps en Python
wxPython: dessin simultané d'animation et de dessin graphique
Reformatez l'axe des temps du graphique de la série chronologique des pandas avec matplotlib
Parcourir .loc et .iloc en même temps dans pandas DataFrame
Tracer CSV de données de séries temporelles avec une valeur unixtime en Python (matplotlib)
Configurer un serveur qui traite plusieurs connexions en même temps
Formater et afficher des données de séries chronologiques avec différentes échelles et unités avec Python ou Matplotlib
Je veux créer un lecteur de musique et enregistrer de la musique en même temps
Implémentez "Data Visualization Design # 3" avec pandas et matplotlib
Boucle les variables en même temps dans le modèle
Je voulais juste extraire les données de la date et de l'heure souhaitées avec Django
Regardons le diagramme de dispersion avant l'analyse des données
Obtenez des commentaires et des abonnés avec l'API de données YouTube
Ajustez le rapport de plusieurs chiffres avec le gridspec de Matplotlib
Graphique 3D avec matplotlib
Diagramme de séries chronologiques / Matplotlib
J'ai essayé de publier automatiquement sur ChatWork au moment du déploiement avec Fabric et ChatWork Api
Comment enregistrer les mêmes données plusieurs fois avec une seule entrée sur l'écran de gestion de Django
Procédure pour changer le nom de la table et le nom de la colonne du modèle Django en même temps
Fonction intégrée Python ~ divmod ~ Obtenons le quotient et le reste de la division en même temps
[Python] Lisez le fichier csv et affichez la figure avec matplotlib
[Introduction à matplotlib] Lire l'heure de fin à partir des données COVID-19 ♬
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
python Remarque: enumerate () -Obtenir l'index et l'élément de la liste en même temps et tourner pour l'instruction
Graphique des données Excel avec matplotlib (1)
Graphique des données Excel avec matplotlib (2)
Bar plot empilable avec matplotlib
Animer plusieurs graphiques avec matplotlib
[Python 3.8 ~] Réécrire des tableaux etc. en même temps que la définition [astuces]
Installer et gérer plusieurs environnements de la même distribution sur WSL
Lors du traçage des données de séries chronologiques et de l'obtention d'une erreur de débordement matplotlib
[Statistiques] [Analyse des séries chronologiques] Tracez le modèle ARMA et saisissez la tendance.