SourceForge logo
SourceForge logo
Menu

matplotlib-users

From: billyi <bil...@ho...> - 2014年06月26日 08:43:04
Hi all! I'm trying to plot some sea ice freeboard data (netCDF, Gridded total
freeboard) on the Antarctic sea, but the data that should plot nicely around
Antarctica lies at the bottom of my image. NetCDF and matplotlib are fairly
new to me so I'm not quite sure, where the error could be and I feel like
I've search and tried everything there is. 
<http://matplotlib.1069221.n5.nabble.com/file/n43580/bad_fb.png> 
from scipy.io.netcdf import netcdf_file as Dataset
import numpy as np
import matplotlib.pyplot as plt
FB = Dataset('./datasets/fb-0217-0320.nc', 'r')
f = FB.variables['f'][:,:]
lat = FB.variables['lat'][:,0]
lon = FB.variables['lon'][0,:]
masked_fb = np.ma.masked_where(np.isnan(f), f)
mtx_lon, mtx_lat = np.meshgrid(lon, lat)
m = Basemap(projection='spstere',boundinglat=-50, lon_0=180.,
resolution='l')
m.bluemarble()
plt.figure()
m.pcolormesh(mtx_lon, mtx_lat, masked_fb, latlon=True)
plt.show()
And ncdump gives:
dimensions:
x = 79 ;
y = 83 ;
variables:
float lat(y, x) ;
 lat:standard_name = "latitude" ;
 lat:long_name = "latitude coordinate" ;
 lat:units = "degrees_north" ;
float lon(y, x) ;
 lon:standard_name = "longitude" ;
 lon:long_name = "longitude coordinate" ;
 lon:units = "degrees_east" ;
float f(y, x) ;
 f:long_name = "total_freeboard" ;
 f:units = "mm" ;
 f:coordinates = "lat lon" ;
Could there be something funny with the projection or handling the data?
(When using meshgrid, handling the coordinates like ['lat'][:,0] seems
necessary, otherwise it turns lats and lons like (6557,6557) and gives error
message for pcolormesh, since masked_fb is (83,79).)
--
View this message in context: http://matplotlib.1069221.n5.nabble.com/Data-plotting-in-a-wrong-place-tp43580.html
Sent from the matplotlib - users mailing list archive at Nabble.com.
From: Benjamin R. <ben...@ou...> - 2014年06月26日 14:52:47
don't know if this would make a difference, but meshgrid here is completely
unnecessary given that the netcdf file has the lats and lons in 2
dimensions anyway.
Given that this is a polar projection, I wouldn't be surprised if there is
something wonky there. Are the longitudes and latitudes monotonic?
Cheers!
Ben Root
On Thu, Jun 26, 2014 at 4:42 AM, billyi <bil...@ho...> wrote:
> Hi all! I'm trying to plot some sea ice freeboard data (netCDF, Gridded
> total
> freeboard) on the Antarctic sea, but the data that should plot nicely
> around
> Antarctica lies at the bottom of my image. NetCDF and matplotlib are fairly
> new to me so I'm not quite sure, where the error could be and I feel like
> I've search and tried everything there is.
> <http://matplotlib.1069221.n5.nabble.com/file/n43580/bad_fb.png>
>
> from scipy.io.netcdf import netcdf_file as Dataset
> import numpy as np
> import matplotlib.pyplot as plt
>
> FB = Dataset('./datasets/fb-0217-0320.nc', 'r')
> f = FB.variables['f'][:,:]
> lat = FB.variables['lat'][:,0]
> lon = FB.variables['lon'][0,:]
> masked_fb = np.ma.masked_where(np.isnan(f), f)
> mtx_lon, mtx_lat = np.meshgrid(lon, lat)
> m = Basemap(projection='spstere',boundinglat=-50, lon_0=180.,
> resolution='l')
> m.bluemarble()
>
> plt.figure()
> m.pcolormesh(mtx_lon, mtx_lat, masked_fb, latlon=True)
> plt.show()
>
> And ncdump gives:
> dimensions:
> x = 79 ;
> y = 83 ;
> variables:
> float lat(y, x) ;
> lat:standard_name = "latitude" ;
> lat:long_name = "latitude coordinate" ;
> lat:units = "degrees_north" ;
> float lon(y, x) ;
> lon:standard_name = "longitude" ;
> lon:long_name = "longitude coordinate" ;
> lon:units = "degrees_east" ;
> float f(y, x) ;
> f:long_name = "total_freeboard" ;
> f:units = "mm" ;
> f:coordinates = "lat lon" ;
>
> Could there be something funny with the projection or handling the data?
> (When using meshgrid, handling the coordinates like ['lat'][:,0] seems
> necessary, otherwise it turns lats and lons like (6557,6557) and gives
> error
> message for pcolormesh, since masked_fb is (83,79).)
>
>
>
> --
> View this message in context:
> http://matplotlib.1069221.n5.nabble.com/Data-plotting-in-a-wrong-place-tp43580.html
> Sent from the matplotlib - users mailing list archive at Nabble.com.
>
>
> ------------------------------------------------------------------------------
> Open source business process management suite built on Java and Eclipse
> Turn processes into business applications with Bonita BPM Community Edition
> Quickly connect people, data, and systems into organized workflows
> Winner of BOSSIE, CODIE, OW2 and Gartner awards
> http://p.sf.net/sfu/Bonitasoft
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
From: billyi <bil...@ho...> - 2014年06月27日 06:15:02
Oh my, it WAS the meshgrid! Thank you so much! 
When reading the coordinates like:
lat = FB.variables['lat'][:,:]
lon = FB.variables['lon'][:,:]
And plotting (without meshgrid!):
m.pcolormesh(lon, lat, masked_fb, latlon=True)
it works! Now I feel stupid.
And I think the longitudes and latitudes are not monotonic, but I don't know
the way to check this, other than checking the array like lon[:] in
terminal. Is there a better way?
And thank you again!
Bill Wang
--
View this message in context: http://matplotlib.1069221.n5.nabble.com/Data-plotting-in-a-wrong-place-tp43580p43588.html
Sent from the matplotlib - users mailing list archive at Nabble.com.
From: Joel B. M. <jo...@ki...> - 2014年06月27日 10:09:26
On 06/27/2014 02:14 AM, billyi wrote:
> And I think the longitudes and latitudes are not monotonic, but I don't know
> the way to check this, other than checking the array like lon[:] in
> terminal. Is there a better way?
numpy slicing (subtract prior from next element check that 'all' the 
results are >=0):
In [1]: import numpy
In [2]: x=numpy.array([1,2,3,4,5])
In [3]: (x[1:]-x[:-1])>=0
Out[3]: array([ True, True, True, True], dtype=bool)
In [4]: numpy.all((x[1:]-x[:-1])>=0)
Out[4]: True
In [5]: x=numpy.array([1,3,2,5,4])
In [6]: numpy.all((x[1:]-x[:-1])>=0)
Out[6]: False
From: Jason S. <jas...@gm...> - 2014年06月27日 14:00:35
On Thu, 2014年06月26日 at 23:14 -0700, billyi wrote:
> Oh my, it WAS the meshgrid! Thank you so much! 
> When reading the coordinates like:
> lat = FB.variables['lat'][:,:]
> lon = FB.variables['lon'][:,:]
> 
> And plotting (without meshgrid!):
> m.pcolormesh(lon, lat, masked_fb, latlon=True)
> 
> it works! Now I feel stupid.
> And I think the longitudes and latitudes are not monotonic, but I don't know
> the way to check this, other than checking the array like lon[:] in
> terminal. Is there a better way?
Yes. Consider:
py> all(lon[:-1] <= lon[1:])
If True, then lon is monotonically increasing. Otherwise it's not.
Description:
lon[:-1] is a slice that takes every element of lon except the last one.
lon[1:] is a slice that takes every element of lon except the first one.
The comparison operator will create a bool numpy array whose elements
will be True for each element "i" if the i'th element is less than or
equal to the i+1'th element. Applying the "all" (or numpy.all)
functions to this bool array will return True if every element is true
and False otherwise.
Faster, easier, and less error-prone than printing out the array and
checking it yourself. Of course you could do something more explicit:
py> monotonic = True
py> for i in range(len(lon)-1):
py> if lon[i] > lon[i+1]:
py> monotonic = False
py> break
HTH,
Jason
From: Benjamin R. <ben...@ou...> - 2014年06月27日 14:23:37
actually, that is technically incorrect. That only works for monotonically
increasing series, but not monotonically decreasing series.
diffs = np.diff(lon)
if np.all(diffs <= 0):
 return True
if np.all(diffs >= 0):
 return True
return False
provided that len(lon) >= 2, obviously (and it doesn't work right for 2 or
more dimensions).
Ben Root
On Fri, Jun 27, 2014 at 10:03 AM, Jason Swails <jas...@gm...>
wrote:
> On Thu, 2014年06月26日 at 23:14 -0700, billyi wrote:
> > Oh my, it WAS the meshgrid! Thank you so much!
> > When reading the coordinates like:
> > lat = FB.variables['lat'][:,:]
> > lon = FB.variables['lon'][:,:]
> >
> > And plotting (without meshgrid!):
> > m.pcolormesh(lon, lat, masked_fb, latlon=True)
> >
> > it works! Now I feel stupid.
> > And I think the longitudes and latitudes are not monotonic, but I don't
> know
> > the way to check this, other than checking the array like lon[:] in
> > terminal. Is there a better way?
>
> Yes. Consider:
>
> py> all(lon[:-1] <= lon[1:])
>
> If True, then lon is monotonically increasing. Otherwise it's not.
>
> Description:
>
> lon[:-1] is a slice that takes every element of lon except the last one.
> lon[1:] is a slice that takes every element of lon except the first one.
> The comparison operator will create a bool numpy array whose elements
> will be True for each element "i" if the i'th element is less than or
> equal to the i+1'th element. Applying the "all" (or numpy.all)
> functions to this bool array will return True if every element is true
> and False otherwise.
>
> Faster, easier, and less error-prone than printing out the array and
> checking it yourself. Of course you could do something more explicit:
>
> py> monotonic = True
> py> for i in range(len(lon)-1):
> py> if lon[i] > lon[i+1]:
> py> monotonic = False
> py> break
>
> HTH,
> Jason
>
>
>
> ------------------------------------------------------------------------------
> Open source business process management suite built on Java and Eclipse
> Turn processes into business applications with Bonita BPM Community Edition
> Quickly connect people, data, and systems into organized workflows
> Winner of BOSSIE, CODIE, OW2 and Gartner awards
> http://p.sf.net/sfu/Bonitasoft
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /