Python plotting data (profiles)

715 views Asked by At

I have a problem with my physics project where I have to use Python netCDF4 even though I don't know how to program. I have read my data and I have seen many different tutorials and I am not sure what to do next. I struggle with that for a long time.

from netCDF4 import Dataset as ncf
file='atmPrf_C001.2010.227.00.03.G04_2013.3520_nc'
data=ncf(file,'r’)
print(infile.dimensions)
print(data.variables)

vertical=data.variables['MSL_alt']
latitude=data.variables['Lat']
longitude=data.variables['Lon']
ang=data.variables['Bend_ang']

Output:

OrderedDict([(u'Lat', <type 'netCDF4._netCDF4.Variable'>
float32 Lat(MSL_alt)
    units: deg
    valid_range: [-90.  90.]
    _FillValue: -999.0
    long_name: Latitude of perigee point
unlimited dimensions:
current shape = (2849,)
filling off
), (u'Lon', <type 'netCDF4._netCDF4.Variable'>
float32 Lon(MSL_alt)
    units: deg
    valid_range: [-180.  180.]
    _FillValue: -999.0
    long_name: Longitude of perigee point
unlimited dimensions:
current shape = (2849,)
filling off
), (u'MSL_alt', <type 'netCDF4._netCDF4.Variable'>
float32 MSL_alt(MSL_alt)
    units: km
    valid_range: [   0.  999.]
    _FillValue: -999.0
    long_name: Mean sea level altitude of perigee point
unlimited dimensions:
current shape = (2849,)
filling off
), (u'Ref', <type 'netCDF4._netCDF4.Variable'>
float32 Ref(MSL_alt)
    units: N
    valid_range: [    0.  9999.]
    _FillValue: -999.0
    long_name: Refractivity
unlimited dimensions:
current shape = (2849,)
filling off
), (u'Azim', <type 'netCDF4._netCDF4.Variable'>
float32 Azim(MSL_alt)
    units: deg
    valid_range: [    0.  1500.]
    _FillValue: -999.0
    long_name: Azimuth of occultation plane wrt North
unlimited dimensions:
current shape = (2849,)
filling off
), (u'Pres', <type 'netCDF4._netCDF4.Variable'>
float32 Pres(MSL_alt)
    units: mb
    valid_range: [    0.  1500.]
    _FillValue: -999.0
    long_name: Dry pressure
unlimited dimensions:
current shape = (2849,)
filling off
), (u'Temp', <type 'netCDF4._netCDF4.Variable'>
float32 Temp(MSL_alt)
    units: C
    valid_range: [-200.  100.]
    _FillValue: -999.0
    long_name: Dry temperature
unlimited dimensions:
current shape = (2849,)
filling off
), (u'Bend_ang', <type 'netCDF4._netCDF4.Variable'>
float64 Bend_ang(MSL_alt)
    units: rad
    valid_range: [  0.  10.]
    _FillValue: -999.0
    long_name: Raw (unoptimized) bending angle
unlimited dimensions:
current shape = (2849,)
filling off
), (u'Opt_bend_ang', <type 'netCDF4._netCDF4.Variable'>
float64 Opt_bend_ang(MSL_alt)
    units: rad
    valid_range: [  0.  10.]
    _FillValue: -999.0
    long_name: Optimized bending angle
unlimited dimensions:
current shape = (2849,)
filling off
), (u'Impact_height', <type 'netCDF4._netCDF4.Variable'>
float32 Impact_height(MSL_alt)
    units: km
    valid_range: [   0.  999.]
    _FillValue: -999.0
    long_name: Impact height
unlimited dimensions:
current shape = (2849,)
filling off
), (u'Bend_ang_stdv', <type 'netCDF4._netCDF4.Variable'>
float32 Bend_ang_stdv(MSL_alt)
    units: rad
    valid_range: [  0.  10.]
    _FillValue: -999.0
    long_name: Bending angle uncertainty
unlimited dimensions:
current shape = (2849,)
filling off
), (u'Bend_ang_conf', <type 'netCDF4._netCDF4.Variable'>
int32 Bend_ang_conf(MSL_alt)
    units: %
    valid_range: [  0 100]
    _FillValue: -999
    long_name: Bending angle confidence
unlimited dimensions:
current shape = (2849,)
filling off
), (u'OL_par', <type 'netCDF4._netCDF4.Variable'>
float64 OL_par(OL_par)
    _FillValue: -999.0
unlimited dimensions:
current shape = (20,)
filling off
), (u'OL_ipar', <type 'netCDF4._netCDF4.Variable'>
int32 OL_ipar(OL_par)
    _FillValue: -999
unlimited dimensions:
current shape = (20,)
filling off
), (u'OL_vec1', <type 'netCDF4._netCDF4.Variable'>
float64 OL_vec1(OL_vec)
    _FillValue: -999.0
unlimited dimensions:
current shape = (7949,)
filling off
), (u'OL_vec2', <type 'netCDF4._netCDF4.Variable'>
float64 OL_vec2(OL_vec)
    _FillValue: -999.0
unlimited dimensions:
current shape = (7949,)
filling off
), (u'OL_vec3', <type 'netCDF4._netCDF4.Variable'>
float64 OL_vec3(OL_vec)
    _FillValue: -999.0
unlimited dimensions:
current shape = (7949,)
filling off
), (u'OL_vec4', <type 'netCDF4._netCDF4.Variable'>
float64 OL_vec4(OL_vec)
    _FillValue: -999.0
unlimited dimensions:
current shape = (7949,)
filling off
)])

I don't know what to do next, the last thing I could do was to declare the variables, I should focus on the bending angle but I don't see it in this data, how big should it be or should I know declare the dimensions? I am begging someone for hints because this voluntary science project drives me crazy already. Thank you.

UPDATE: I just have tried to plot it raw:

plt.plot(ang)
plt.show()

and got this: enter image description here

1

There are 1 answers

1
Bart On BEST ANSWER

When you write ang=data.variables['Bend_ang'], an object (NetCDF4-variable) is returned which contains (in addition to the data) also things like typically the units, dimensions, name, which you can access as:

ang_units = data.variables['Bend_ang'].units
ang_dims  = data.variables['Bend_ang'].dimensions

The data itself can be read to a Numpy array using:

vertical_data = data.variables['MSL_alt'][:]
ang_data      = data.variables['Bend_ang'][:]

In your case those will be a one dimensional arrays, which can simply be plotted using:

plt.plot(ang_data, vertical_data)