Ich versuche, die basemap tutorial for SST and ice analysis zu folgen. Meine Eingabedaten unterscheiden sich von den Daten in dem Beispiel, das von netCDF4
als maskiertes Array stammt.restrukturieren pandas datenframe in meshgrid für grundkarte
Ich habe einen pandas
Datenrahmen wie:
val_df[0:5]
Out[47]:
lat lon value
0 0.4 98.7 NaN
1 0.4 98.8 NaN
2 0.4 98.9 0.64
3 0.4 99.0 NaN
4 0.5 98.5 1.23
den Lats und Lons eine einzigartige Lage auf einer Karte Raster für den Datenpunkt darstellen. Um eine Beispieldatenrahmen erstellen Sie den folgenden Code verwenden:
from itertools import product
import pandas as pd
import numpy as np
locations = np.array([x for x in product([1,2,3],[4,5,6])])
data = np.random.random(len(locations))
val_df = pd.DataFrame({'lat':locations[:,0], 'lon':locations[:,1],
'value':data})
Was ich vor getan wird diese Datenrahmen nehmen, schwenken sie (mit dem eingebauten in Pivot-Funktion), so dass die lat
Spalte ist der Index und die lon
Spalte ist die Spalten und die Werte sind die Werte. Dann kann ich m.imshow
verwenden, um die resultierenden Werte zu plotten.
Dies scheint jedoch eine schlechte Lösung zu sein. A) pcolormesh
ist mehr empfohlen als imshow
aus Gründen, die für mich unklar sind, B) Es scheint, dass Leute normalerweise meshgrid und dann ein maskiertes Array verwenden. Allerdings bin ich mir nicht sicher, wie ich meine Daten basierend auf den Grundkartenbeispielen in das Meshgrid und das maskierte Array strukturieren kann, da die Daten in den Beispielen vorgeformt sind.
Als ich die mesh_grid des Lats/Lons erstelle ich Sie wie folgt vor:
latmin = np.floor(val_df.lat.min())
latmax = np.ceil(val_df.lat.max())
lonmin = np.floor(val_df.lon.min())
lonmax = np.ceil(val_df.lon.max())
lats = np.arange(latmin, latmax, 0.1)
lons = np.arange(lonmin, lonmax, 0.1)
lats_mesh, lons_mesh = np.meshgrid(lats, lons)
Aber ich bin an dieser Stelle unklar, wie zu strukturieren und maskieren die value
Spalte, so dass die Werte in der richtigen Stelle erscheinen das Maschengitters, wenn ich es zu pcolormesh
geben wie so:
from mpl_toolkits.basemap import Basemap
m = Basemap(projection='merc'
, llcrnrlon=lonmin
, llcrnrlat=latmin
, urcrnrlon=lonmax
, urcrnrlat=latmax)
m.drawcoastlines()
m.drawstates()
m.drawcountries()
m.fillcontinents(color='gray', lake_color='white', zorder=0)
m.drawmapboundary(fill_color='white')
pc1 = m.pcolormesh(lons, lats, masked_data, shading='flat', cmap='hot_r', latlon=True)
Können Sie ein Beispiel mit beliebigen Daten, die wir ausführen können? – Chiel
Ich habe eine tiefere Beschreibung hinzugefügt. – mnky9800n
Wenn Sie Hilfe benötigen, ist es wichtig, dass Sie ein Skript erstellen, das Benutzer direkt kopieren und ausführen können. – Chiel