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.
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()
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»).
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()
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.
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