Zeichnen Sie mit Pythons Matplotlib mehrere Karten und Daten gleichzeitig

Bei der Erforschung der Erd- und Planetenwissenschaften stoße ich häufig auf eine Situation, in der ich mehrere Karten und Daten gleichzeitig auf einer Figur zeichnen möchte. Diesmal mit Pythons Matplotlib,

Das Ziel ist das.

1. Zeichnen Sie mehrere Karten gleichzeitig

Code

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

xlim = [100, 170]			#Umfang der Figur(Richtung der x-Achse: Längengrad)
ylim = [10, 60]				#Umfang der Figur(Richtung der y-Achse: Breitengrad)
column = 3					#Anzahl der Spalten
fsizex, fsizey= 16, 18		#Horizontale und vertikale Länge der Figur
line_interval = 15			#Abstand zwischen Breitengrad und Meridianlinien auf der Karte
fontsize = 20				#Schriftgröße

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

row = 12 / column			#Anzahl der Reihen
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()

Zahl

ダウンロード (12).png

2. Zeichnen Sie mehrere Karten und Daten gleichzeitig

Vorbereitung

Wenn die Diagramme für jeden Monat zweidimensionale Daten sind, kombinieren Sie alle Daten für die 12 Monate zu einem dreidimensionalen Array.

xn = 360			#X-Achse der Daten(Längengrad)Anzahl der Gitter in Richtung
yn = 155            #Y-Achse der Daten(Breite)Anzahl der Gitter in Richtung
data = np.zeros((12, yn, xn))
for i in range(0, 12):
	data[i, :, :] = .....  # (i+1)Prozess zum Abrufen von Monatsdaten

Zusätzlich wird ein eindimensionales Array erfasst, das der x-Achse (Längsachse) und der y-Achse (Breitengrad) der zweidimensionalen Daten entspricht. Diesmal jeweils

(Beide sind numpy.ndarray).

Code

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

xlim = [100, 170]			#Umfang der Figur(Richtung der x-Achse: Längengrad)
ylim = [10, 60]				#Umfang der Figur(Richtung der y-Achse: Breitengrad)
column = 3					#Anzahl der Spalten
fsizex, fsizey= 16, 18		#Horizontale und vertikale Länge der Figur
cb_min, cb_max = -2, 32     #Minimaler / maximaler Farbbalken
cb_div = 17					#Anzahl der in der Farbleiste verwendeten Farben
clabel = 'Sea Surface Temperature(deg)' #Etikett an der Farbleiste angebracht
line_interval = 15						#Abstand zwischen Breitengrad und Meridianlinien auf der Karte
fontsize = 20							#Schriftgröße

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

row = 12 / column			#Anzahl der Reihen
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)

    #Farbkontur zeichnen
    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])

#Zeichnen Sie einen Farbbalken
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()

Zahl

ダウンロード (13).png

Erfolgreich beim sicheren Erstellen. Die Kombination von vertikal und horizontal kann durch Ändern des Spaltenwerts frei geändert werden.

** Referenz-URL **

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

Zeichnen Sie mit Pythons Matplotlib mehrere Karten und Daten gleichzeitig
Ich habe die gleiche Datenanalyse mit kaggle notebook (python) und PowerBI gleichzeitig versucht ②
Ich habe die gleiche Datenanalyse mit kaggle notebook (python) und PowerBI gleichzeitig versucht ①
Typkonvertierung mehrerer Spalten von Pandas DataFrame mit Astype gleichzeitig
Drehen Sie in Python mehrere Listen mit for-Anweisung gleichzeitig
wxPython: Gleichzeitiges Zeichnen von Animationen und Grafiken
Formatieren Sie die Zeitachse des Pandas-Zeitreihendiagramms mit matplotlib neu
Durchsuchen Sie .loc und .iloc gleichzeitig in pandas DataFrame
Zeichnen Sie die CSV von Zeitreihendaten mit einem Unixtime-Wert in Python (matplotlib).
Richten Sie einen Server ein, der mehrere Verbindungen gleichzeitig verarbeitet
Formatieren und Anzeigen von Zeitreihendaten mit verschiedenen Maßstäben und Einheiten mit Python oder Matplotlib
Ich möchte gleichzeitig einen Musik-Player erstellen und Musik ablegen
Implementieren Sie "Data Visualization Design # 3" mit Pandas und Matplotlib
Schleifen Sie gleichzeitig Variablen in der Vorlage
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Schauen wir uns das Streudiagramm vor der Datenanalyse an
Erhalten Sie Kommentare und Abonnenten mit der YouTube-Daten-API
Passen Sie das Verhältnis mehrerer Zahlen mit der Rasterspezifikation von Matplotlib an
3D-Plot mit Matplotlib
Zeitreihendiagramm / Matplotlib
Ich habe versucht, zum Zeitpunkt der Bereitstellung mit Fabric und ChatWork Api automatisch in ChatWork zu posten
So registrieren Sie dieselben Daten mehrmals mit einer Eingabe auf dem Verwaltungsbildschirm von Django
Verfahren zum gleichzeitigen Ändern des Tabellennamens und des Spaltennamens des Django-Modells
In Python integrierte Funktion ~ divmod ~ Lassen Sie uns gleichzeitig den Quotienten und den Rest der Division erhalten
[Python] Lesen Sie die CSV-Datei und zeigen Sie die Abbildung mit matplotlib an
[Einführung in matplotlib] Lesen Sie die Endzeit aus den COVID-19-Daten ♬
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
python Hinweis: enumerate () - Index und Element der Liste gleichzeitig abrufen und zur Anweisung wenden
Zeichnen Sie Excel-Daten mit matplotlib (1)
Zeichnen Sie Excel-Daten mit matplotlib (2)
Stapelbares Barplot mit Matplotlib
Animieren Sie mehrere Diagramme mit matplotlib
[Python 3.8 ~] Schreiben Sie Arrays usw. gleichzeitig mit der Definition neu [Tipps]
Installieren und verwalten Sie mehrere Umgebungen derselben Distribution in WSL
Beim Zeichnen von Zeitreihendaten und Abrufen von matplotlib OverflowError
[Statistik] [Zeitreihenanalyse] Zeichnen Sie das ARMA-Modell und erfassen Sie die Tendenz.