Auswahl plotten (netcdf Dateien)
Verfasst: Montag 28. April 2014, 09:04
Hallo ihr Lieben,
ich hab mal wieder ein Problem mit Python.
Ich arbeite gerade mit netcdf Dateien. Und zwar habe ich eine netcdf Datei in der für Deutschland die Bodenfeuchte über 60 Jahre zusammengefasst ist und in einer netcdf Datei habe ich die naturräumliche Gliederung Deutschlands (das ist quasi nur ein Rasterdatensatz, der auf die Bodenfeuchtedaten angepasst wurde).
Deutschland besteht aus 70 Hauptgruppen (durchnummeriert von 1-70).
Mein Ziel ist es, dass ich mir die Koordinaten einer Hauptgruppe herausfiltere und dieses Koordinaten nutze um mir die Bodenfeuchte für diese Hauptgruppe anzuzeigen. Leider kann ich nicht diese Auswahl plotten, es folgt immer die Fehlermeldung, dass z ein 2D Array sein muss.
Hier mein bisheriger Ansatz:
Ich kann mir auf das ganze keinen Reim machen, was mache ich falsch?
Kann mir einer helfen?
Vielen Dank =)
ich hab mal wieder ein Problem mit Python.
Ich arbeite gerade mit netcdf Dateien. Und zwar habe ich eine netcdf Datei in der für Deutschland die Bodenfeuchte über 60 Jahre zusammengefasst ist und in einer netcdf Datei habe ich die naturräumliche Gliederung Deutschlands (das ist quasi nur ein Rasterdatensatz, der auf die Bodenfeuchtedaten angepasst wurde).
Deutschland besteht aus 70 Hauptgruppen (durchnummeriert von 1-70).
Mein Ziel ist es, dass ich mir die Koordinaten einer Hauptgruppe herausfiltere und dieses Koordinaten nutze um mir die Bodenfeuchte für diese Hauptgruppe anzuzeigen. Leider kann ich nicht diese Auswahl plotten, es folgt immer die Fehlermeldung, dass z ein 2D Array sein muss.
Hier mein bisheriger Ansatz:
Code: Alles auswählen
# 1. netcdf Datei (Bodenfeuchte SMI):
f.dimensions # {'time': None, 'easting': 175, 'northing': 225}
# daraus herausgefiltert, SMI mit Zeit, Northing und Easting
SMI = f.variables['SMI']
SMI.dimensions #('time', 'northing', 'easting')
SMI.shape #(720, 225, 175)
#2. netcdf Datei (Naturraum):
Natraum.dimensions #{'y': 225, 'x': 175}
Latitude=Natraum.variables['x'][:]
Longitude=Natraum.variables['y'][:]
Hauptgruppe=Natraum.variables['Haupteinheit'][:]
Hauptgruppe.shape # (225, 175)
# ob Longitude und Nothing und Latitude und Easting der beiden netcdf gleich sind habe ich über eine Schleife geprüft
# jetzt filtere ich die Hauptgruppe 1 heraus:
b=np.where(Hauptgruppe==1)
c=b[0]
d=b[1]
# Gegenkontrolle:
Hauptgruppe[c[:],d[:]] # ergibt ein Array voller 1en
# so und nun würde ich das gerne plotten (sodass ich auch weiß, wo die Hauptgruppe liegt)
# alle Hauptgruppen konnte ich mir darüber anzeigen lassen:
levels=MaxNLocator(nbins=70).bin_boundaries(1,70)
plt.contour(Latitude,Longitude,Hauptgruppe,levels=levels)
# und nun dachte ich geb ich einfach dafür die Indexe von c und d ein.
plt.contour(Latitude[c[:]],Longitude[d[:]],Hauptgruppe[c[:],d[:]])
# aber da kommt folgende Fehlermeldung:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/.../lib/python2.7/site-packages/matplotlib/pyplot.py", line 2632, in contour
ret = ax.contour(*args, **kwargs)
File "/.../lib/python2.7/site-packages/matplotlib/axes.py", line 7976, in contour
return mcontour.QuadContourSet(self, *args, **kwargs)
File "/.../lib/python2.7/site-packages/matplotlib/contour.py", line 1414, in __init__
ContourSet.__init__(self, ax, *args, **kwargs)
File "/.../lib/python2.7/site-packages/matplotlib/contour.py", line 860, in __init__
self._process_args(*args, **kwargs)
File "/.../lib/python2.7/site-packages/matplotlib/contour.py", line 1427, in _process_args
x, y, z = self._contour_args(args, kwargs)
File "/.../lib/python2.7/site-packages/matplotlib/contour.py", line 1491, in _contour_args
x, y, z = self._check_xyz(args[:3], kwargs)
File "/.../lib/python2.7/site-packages/matplotlib/contour.py", line 1525, in _check_xyz
raise TypeError("Input z must be a 2D array.")
TypeError: Input z must be a 2D array.
# eigentlich will ich mir ja nicht nur die Hauptgruppe anzeigen lassen, sondern den SMI, aber auch da funktioniert es nicht
plt.contour(easting[c[:]],northing[d[:]],SMI[:,c[:],d[:]],MaxNLocator(nbins=15).bin_boundaries(0,1))
# als Fehlermeldung kommt dann:
TypeError: Length of y must be number of rows in z.
Kann mir einer helfen?
Vielen Dank =)