basemap error or user error?

Hi all,

I have a weird thing happening with basemap and I am not sure if it's
basemap or me, but more than likely it's me :frowning:

Here is the grib file that I am using:
http://downloads.75ive.com/multi_1.20090321.t18z_multi_1.wc_10m.all.grb2
http://downloads.75ive.com/multi_1.20090321.t18z_multi_1.wc_10m.all.grb2

And here is my code:

···

#############################################
import matplotlib
import matplotlib.mpl as mpl
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import matplotlib.pylab as pylab
from mpl_toolkits.basemap import Basemap
from grib2 import Grib2Decode

grbs = Grib2Decode('multi_1.20090321.t18z_multi_1.wc_10m.all.grb2')

lats, lons = grbs[0].grid()
mapCoords = [32.35,-121.0,34.75,-116.75]
#mapCoords = [lats.min(),lons.min(),lats.max(),lons.max()]

colorList =
[[0.,0.,205./255.],[0,102./255.,255./255.],[0,183./255.,255./255.],[0,224./255.,255./255.],
           
[0,255./255.,255./255.],[0,255./255.,204./255.],[0,255./255.,153./255.],[0,255./255.,0],
           
[153./255.,255./255.,0],[204./255.,255./255.,0],[255./255.,255./255.,0],[255./255.,204./255.,0],
           
[255./255.,153./255.,0],[255./255.,102./255.,0],[255./255.,0,0],[176./255.,48./255.,96./255.],
            [208./255.,32./255.,144./255.],[255./255.,0,255./255.]]
cmap = matplotlib.colors.ListedColormap(colorList, name = 'theColorMap', N =
len(colorList))

m = Basemap(projection='merc',lat_ts = 30,\
           
llcrnrlat=mapCoords[0],llcrnrlon=mapCoords[1],urcrnrlat=mapCoords[2],urcrnrlon=mapCoords[3],\
            resolution='h',area_thresh=0.5, suppress_ticks = True)

fig = plt.figure(figsize=(14.58,10.58))
fig.set_dpi(100)

nlats, nlons = grbs[0].data().shape

x = np.linspace(lons.min(),lons.max(),nlons)
y = np.linspace(lats.min(),lats.max(),nlats)

X, Y = m(*np.meshgrid(x, y))

z = grbs[0].data().filled(1)

m.contourf(X,Y,z,cmap=cmap,levels=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],extend='both')

m.fillcontinents(color='green',lake_color='b')
m.drawcoastlines(color='k', linewidth=0.75)
m.drawcountries(color='k', linewidth=0.25)
m.drawstates(color='k', linewidth=0.25)
m.drawmapboundary(linewidth=1.0, color='k')

plt.show()
#############################################

If you look at lines 14 and 15 you can see that i have a variable called
mapCoords that feeds the lat/lon coordinates to the basemap object. If i set
them up using the commented line (line 15) it will plot the map for all the
data in the file and it will display it correctly. If i use line 14 which is
the zoomed area that i am interested in it will display the basemap map
correctly zoomed in but it will not show the plotted data. Any ideas on what
is happening here?

Also, if you have any comments on optimizing the code I would really
appreciate it!

Thanks,
Anton


View this message in context: http://www.nabble.com/basemap-error-or-user-error--tp23017806p23017806.html
Sent from the matplotlib - users mailing list archive at Nabble.com.

antonv wrote:

Hi all,

I have a weird thing happening with basemap and I am not sure if it's
basemap or me, but more than likely it's me :frowning:

Here is the grib file that I am using:
http://downloads.75ive.com/multi_1.20090321.t18z_multi_1.wc_10m.all.grb2
http://downloads.75ive.com/multi_1.20090321.t18z_multi_1.wc_10m.all.grb2

And here is my code:
#############################################
import matplotlib
import matplotlib.mpl as mpl
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import matplotlib.pylab as pylab
from mpl_toolkits.basemap import Basemap
from grib2 import Grib2Decode

grbs = Grib2Decode('multi_1.20090321.t18z_multi_1.wc_10m.all.grb2')

lats, lons = grbs[0].grid()
mapCoords = [32.35,-121.0,34.75,-116.75]
#mapCoords = [lats.min(),lons.min(),lats.max(),lons.max()]

colorList =
[[0.,0.,205./255.],[0,102./255.,255./255.],[0,183./255.,255./255.],[0,224./255.,255./255.],
           [0,255./255.,255./255.],[0,255./255.,204./255.],[0,255./255.,153./255.],[0,255./255.,0],
           [153./255.,255./255.,0],[204./255.,255./255.,0],[255./255.,255./255.,0],[255./255.,204./255.,0],
           [255./255.,153./255.,0],[255./255.,102./255.,0],[255./255.,0,0],[176./255.,48./255.,96./255.],
            [208./255.,32./255.,144./255.],[255./255.,0,255./255.]]
cmap = matplotlib.colors.ListedColormap(colorList, name = 'theColorMap', N =
len(colorList))

m = Basemap(projection='merc',lat_ts = 30,\
           llcrnrlat=mapCoords[0],llcrnrlon=mapCoords[1],urcrnrlat=mapCoords[2],urcrnrlon=mapCoords[3],\
            resolution='h',area_thresh=0.5, suppress_ticks = True)

fig = plt.figure(figsize=(14.58,10.58))
fig.set_dpi(100)

nlats, nlons = grbs[0].data().shape

x = np.linspace(lons.min(),lons.max(),nlons)
y = np.linspace(lats.min(),lats.max(),nlats)

X, Y = m(*np.meshgrid(x, y))

z = grbs[0].data().filled(1)

m.contourf(X,Y,z,cmap=cmap,levels=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],extend='both')

m.fillcontinents(color='green',lake_color='b')
m.drawcoastlines(color='k', linewidth=0.75)
m.drawcountries(color='k', linewidth=0.25)
m.drawstates(color='k', linewidth=0.25)
m.drawmapboundary(linewidth=1.0, color='k')

plt.show()
#############################################

If you look at lines 14 and 15 you can see that i have a variable called
mapCoords that feeds the lat/lon coordinates to the basemap object. If i set
them up using the commented line (line 15) it will plot the map for all the
data in the file and it will display it correctly. If i use line 14 which is
the zoomed area that i am interested in it will display the basemap map
correctly zoomed in but it will not show the plotted data. Any ideas on what
is happening here?

Also, if you have any comments on optimizing the code I would really
appreciate it!

Thanks,
Anton

Anton: Probably your data doesn't cover the zoomed region, but without actually having your data I can't be sure.

One question: why are you rebuilding the lons and lats from scratch when you already have them? It seems like you can get rid of

nlats, nlons = grbs[0].data().shape
x = np.linspace(lons.min(),lons.max(),nlons)
y = np.linspace(lats.min(),lats.max(),nlats)
X, Y = m(*np.meshgrid(x, y))

and replace it with

X,Y = m(lons, lats)

-Jeff

···

--
Jeffrey S. Whitaker Phone : (303)497-6313
Meteorologist FAX : (303)497-6449
NOAA/OAR/PSD R/PSD1 Email : Jeffrey.S.Whitaker@...259...
325 Broadway Office : Skaggs Research Cntr 1D-113
Boulder, CO, USA 80303-3328 Web : Jeffrey S. Whitaker: NOAA Physical Sciences Laboratory

Jeff, thanks for the comment on rebuilding the lons and lats!

I have attached 2 images, one that is from the whole data in the file and
the other the zoomed version.
http://www.nabble.com/file/p23031035/basemap_all.png basemap_all.png
http://www.nabble.com/file/p23031035/basemap_zoom.png basemap_zoom.png

What seems to be happening is that the coordinates seem to be in different
projections as the values of lats.min(),lons.min(),lats.max(),lons.max() are
25.0,210.0,50.0,250.0 while the list I'm providing is
32.35,-121.0,34.75,-116.75. Any ideas on why basemap seems to be reading
both coordinate lists and provides the proper land contours while contourf
seems to be off?

Thanks,
Anton

Jeff Whitaker wrote:

···

antonv wrote:

Hi all,

I have a weird thing happening with basemap and I am not sure if it's
basemap or me, but more than likely it's me :frowning:

Here is the grib file that I am using:
http://downloads.75ive.com/multi_1.20090321.t18z_multi_1.wc_10m.all.grb2
http://downloads.75ive.com/multi_1.20090321.t18z_multi_1.wc_10m.all.grb2

And here is my code:
#############################################
import matplotlib
import matplotlib.mpl as mpl
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import matplotlib.pylab as pylab
from mpl_toolkits.basemap import Basemap
from grib2 import Grib2Decode

grbs = Grib2Decode('multi_1.20090321.t18z_multi_1.wc_10m.all.grb2')

lats, lons = grbs[0].grid()
mapCoords = [32.35,-121.0,34.75,-116.75]
#mapCoords = [lats.min(),lons.min(),lats.max(),lons.max()]

colorList =
[[0.,0.,205./255.],[0,102./255.,255./255.],[0,183./255.,255./255.],[0,224./255.,255./255.],
           
[0,255./255.,255./255.],[0,255./255.,204./255.],[0,255./255.,153./255.],[0,255./255.,0],
           
[153./255.,255./255.,0],[204./255.,255./255.,0],[255./255.,255./255.,0],[255./255.,204./255.,0],
           
[255./255.,153./255.,0],[255./255.,102./255.,0],[255./255.,0,0],[176./255.,48./255.,96./255.],
            [208./255.,32./255.,144./255.],[255./255.,0,255./255.]]
cmap = matplotlib.colors.ListedColormap(colorList, name = 'theColorMap',
N =
len(colorList))

m = Basemap(projection='merc',lat_ts = 30,\
           
llcrnrlat=mapCoords[0],llcrnrlon=mapCoords[1],urcrnrlat=mapCoords[2],urcrnrlon=mapCoords[3],\
            resolution='h',area_thresh=0.5, suppress_ticks = True)

fig = plt.figure(figsize=(14.58,10.58))
fig.set_dpi(100)

nlats, nlons = grbs[0].data().shape

x = np.linspace(lons.min(),lons.max(),nlons)
y = np.linspace(lats.min(),lats.max(),nlats)

X, Y = m(*np.meshgrid(x, y))

z = grbs[0].data().filled(1)

m.contourf(X,Y,z,cmap=cmap,levels=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],extend='both')

m.fillcontinents(color='green',lake_color='b')
m.drawcoastlines(color='k', linewidth=0.75)
m.drawcountries(color='k', linewidth=0.25)
m.drawstates(color='k', linewidth=0.25)
m.drawmapboundary(linewidth=1.0, color='k')

plt.show()
#############################################

If you look at lines 14 and 15 you can see that i have a variable called
mapCoords that feeds the lat/lon coordinates to the basemap object. If i
set
them up using the commented line (line 15) it will plot the map for all
the
data in the file and it will display it correctly. If i use line 14 which
is
the zoomed area that i am interested in it will display the basemap map
correctly zoomed in but it will not show the plotted data. Any ideas on
what
is happening here?

Also, if you have any comments on optimizing the code I would really
appreciate it!

Thanks,
Anton

Anton: Probably your data doesn't cover the zoomed region, but without
actually having your data I can't be sure.

One question: why are you rebuilding the lons and lats from scratch
when you already have them? It seems like you can get rid of

nlats, nlons = grbs[0].data().shape
x = np.linspace(lons.min(),lons.max(),nlons)
y = np.linspace(lats.min(),lats.max(),nlats)
X, Y = m(*np.meshgrid(x, y))

and replace it with

X,Y = m(lons, lats)

-Jeff

--
Jeffrey S. Whitaker Phone : (303)497-6313
Meteorologist FAX : (303)497-6449
NOAA/OAR/PSD R/PSD1 Email : Jeffrey.S.Whitaker@...259...
325 Broadway Office : Skaggs Research Cntr 1D-113
Boulder, CO, USA 80303-3328 Web : Jeffrey S. Whitaker: NOAA Physical Sciences Laboratory

------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options

--
View this message in context: http://www.nabble.com/basemap-error-or-user-error--tp23017806p23031035.html
Sent from the matplotlib - users mailing list archive at Nabble.com.

antonv wrote:

Jeff, thanks for the comment on rebuilding the lons and lats!

I have attached 2 images, one that is from the whole data in the file and
the other the zoomed version. http://www.nabble.com/file/p23031035/basemap_all.png basemap_all.png http://www.nabble.com/file/p23031035/basemap_zoom.png basemap_zoom.png

What seems to be happening is that the coordinates seem to be in different
projections as the values of lats.min(),lons.min(),lats.max(),lons.max() are 25.0,210.0,50.0,250.0 while the list I'm providing is
32.35,-121.0,34.75,-116.75.

Anton: Try using (32.35, 239,34.75,243.25). The longitudes in your data probably go from 0 to 360, so negative longitudes are outside the region spanned by your data.

-Jeff

···

Any ideas on why basemap seems to be reading
both coordinate lists and provides the proper land contours while contourf
seems to be off?

Thanks,
Anton

Jeff Whitaker wrote:
  

antonv wrote:
    

Hi all,

I have a weird thing happening with basemap and I am not sure if it's
basemap or me, but more than likely it's me :frowning:

Here is the grib file that I am using:
http://downloads.75ive.com/multi_1.20090321.t18z_multi_1.wc_10m.all.grb2
http://downloads.75ive.com/multi_1.20090321.t18z_multi_1.wc_10m.all.grb2

And here is my code:
#############################################
import matplotlib
import matplotlib.mpl as mpl
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import matplotlib.pylab as pylab
from mpl_toolkits.basemap import Basemap
from grib2 import Grib2Decode

grbs = Grib2Decode('multi_1.20090321.t18z_multi_1.wc_10m.all.grb2')

lats, lons = grbs[0].grid()
mapCoords = [32.35,-121.0,34.75,-116.75]
#mapCoords = [lats.min(),lons.min(),lats.max(),lons.max()]

colorList =
[[0.,0.,205./255.],[0,102./255.,255./255.],[0,183./255.,255./255.],[0,224./255.,255./255.],
           [0,255./255.,255./255.],[0,255./255.,204./255.],[0,255./255.,153./255.],[0,255./255.,0],
           [153./255.,255./255.,0],[204./255.,255./255.,0],[255./255.,255./255.,0],[255./255.,204./255.,0],
           [255./255.,153./255.,0],[255./255.,102./255.,0],[255./255.,0,0],[176./255.,48./255.,96./255.],
            [208./255.,32./255.,144./255.],[255./255.,0,255./255.]]
cmap = matplotlib.colors.ListedColormap(colorList, name = 'theColorMap',
N =
len(colorList))

m = Basemap(projection='merc',lat_ts = 30,\
           llcrnrlat=mapCoords[0],llcrnrlon=mapCoords[1],urcrnrlat=mapCoords[2],urcrnrlon=mapCoords[3],\
            resolution='h',area_thresh=0.5, suppress_ticks = True)

fig = plt.figure(figsize=(14.58,10.58))
fig.set_dpi(100)

nlats, nlons = grbs[0].data().shape

x = np.linspace(lons.min(),lons.max(),nlons)
y = np.linspace(lats.min(),lats.max(),nlats)

X, Y = m(*np.meshgrid(x, y))

z = grbs[0].data().filled(1)

m.contourf(X,Y,z,cmap=cmap,levels=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],extend='both')

m.fillcontinents(color='green',lake_color='b')
m.drawcoastlines(color='k', linewidth=0.75)
m.drawcountries(color='k', linewidth=0.25)
m.drawstates(color='k', linewidth=0.25)
m.drawmapboundary(linewidth=1.0, color='k')

plt.show()
#############################################

If you look at lines 14 and 15 you can see that i have a variable called
mapCoords that feeds the lat/lon coordinates to the basemap object. If i
set
them up using the commented line (line 15) it will plot the map for all
the
data in the file and it will display it correctly. If i use line 14 which
is
the zoomed area that i am interested in it will display the basemap map
correctly zoomed in but it will not show the plotted data. Any ideas on
what
is happening here?

Also, if you have any comments on optimizing the code I would really
appreciate it!

Thanks,
Anton

Anton: Probably your data doesn't cover the zoomed region, but without actually having your data I can't be sure.

One question: why are you rebuilding the lons and lats from scratch when you already have them? It seems like you can get rid of

nlats, nlons = grbs[0].data().shape
x = np.linspace(lons.min(),lons.max(),nlons)
y = np.linspace(lats.min(),lats.max(),nlats)
X, Y = m(*np.meshgrid(x, y))

and replace it with

X,Y = m(lons, lats)

-Jeff

--
Jeffrey S. Whitaker Phone : (303)497-6313
Meteorologist FAX : (303)497-6449
NOAA/OAR/PSD R/PSD1 Email : Jeffrey.S.Whitaker@...259...
325 Broadway Office : Skaggs Research Cntr 1D-113
Boulder, CO, USA 80303-3328 Web : Jeffrey S. Whitaker: NOAA Physical Sciences Laboratory

------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options

That’s what was happening! Thanks again Jeff!

···

From: Jeff Whitaker <jswhit@…146…>
To: antonv <vasilescu_anton@…9…>
Cc: matplotlib-users@lists.sourceforge.net
Sent: Tuesday, April 14, 2009 4:39:13 AM
Subject: Re: [Matplotlib-users] basemap error or user error?

antonv wrote:

Jeff, thanks for the comment on rebuilding the lons and lats!

I have attached 2 images, one that is from the whole data in the file and
the other the zoomed version. http://www.nabble.com/file/p23031035/basemap_all.png basemap_all.png http://www.nabble.com/file/p23031035/basemap_zoom.png basemap_zoom.png
What seems to be happening is that the coordinates seem to be in different
projections as the values of lats.min(),lons.min(),lats.max(),lons.max() are 25.0,210.0,50.0,250.0 while the list I’m providing is
32.35,-121.0,34.75,-116.75.

Anton: Try using (32.35, 239,34.75,243.25). The longitudes in your data probably go from 0 to 360, so negative longitudes are outside the region spanned by
your data.

-Jeff

Any ideas on why basemap seems to be reading
both coordinate lists and provides the proper land contours while contourf
seems to be off?

Thanks,
Anton

Jeff Whitaker wrote:

antonv wrote:

Hi all,

I have a weird thing happening with basemap and I am not sure if it’s
basemap or me, but more than likely it’s me :frowning:

Here is the grib file that I am using:
http://downloads.75ive.com/multi_1.20090321.t18z_multi_1.wc_10m.all.grb2
http://downloads.75ive.com/multi_1.20090321.t18z_multi_1.wc_10m.all.grb2
And here is my code:
#############################################
import matplotlib
import matplotlib.mpl as mpl
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import matplotlib.pylab as pylab
from mpl_toolkits.basemap import Basemap
from grib2 import Grib2Decode

grbs = Grib2Decode(‘multi_1.20090321.t18z_multi_1.wc_10m.all.grb2’)

lats, lons = grbs[0].grid()
mapCoords = [32.35,-121.0,34.75,-116.75]
#mapCoords = [lats.min(),lons.min(),lats.max(),lons.max()]

colorList =

[[0.,0.,205./255.],[0,102./255.,255./255.],[0,183./255.,255./255.],[0,224./255.,255./255.],

       [0,255./255.,255./255.],[0,255./255.,204./255.],[0,255./255.,153./255.],[0,255./255.,0],
       [153./255.,255./255.,0],[204./255.,255./255.,0],[255./255.,255./255.,0],[255./255.,204./255.,0],
       [255./255.,153./255.,0],[255./255.,102./255.,0],[255./255.,0,0],[176./255.,48./255.,96./255.],
       [208./255.,32./255.,144./255.],[255./255.,0,255./255.]]

cmap = matplotlib.colors.ListedColormap(colorList, name = ‘theColorMap’,
N =
len(colorList))

m = Basemap(projection=‘merc’,lat_ts = 30,\

llcrnrlat=mapCoords[0],llcrnrlon=mapCoords[1],urcrnrlat=mapCoords[2],urcrnrlon=mapCoords[3],\

       resolution='h',area_thresh=0.5, suppress_ticks = True)

fig = plt.figure(figsize=(14.58,10.58))
fig.set_dpi(100)

nlats, nlons = grbs[0].data().shape

x = np.linspace(lons.min(),lons.max(),nlons)
y = np.linspace(lats.min(),lats.max(),nlats)

X, Y = m(*np.meshgrid(x, y))

z = grbs[0].data().filled(1)

m.contourf(X,Y,z,cmap=cmap,levels=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],extend=‘both’)

m.fillcontinents(color=‘green’,lake_color=‘b’)
m.drawcoastlines(color=‘k’, linewidth=0.75)
m.drawcountries(color=‘k’,
linewidth=0.25)
m.drawstates(color=‘k’, linewidth=0.25)
m.drawmapboundary(linewidth=1.0, color=‘k’)

plt.show()
#############################################

If you look at lines 14 and 15 you can see that i have a variable called
mapCoords that feeds the lat/lon coordinates to the basemap object. If i
set
them up using the commented line (line 15) it will plot the map for all
the
data in the file and it will display it correctly. If i use line 14 which
is
the zoomed area that i am interested in it will display the basemap map
correctly zoomed in but it will not show the plotted data. Any ideas on
what
is happening here?

Also, if you have any comments
on optimizing the code I would really
appreciate it!

Thanks,
Anton

Anton: Probably your data doesn’t cover the zoomed region, but without actually having your data I can’t be sure.
One question: why are you rebuilding the lons and lats from scratch when you already have them? It seems like you can get rid of

nlats, nlons = grbs[0].data().shape
x = np.linspace(lons.min(),lons.max(),nlons)
y = np.linspace(lats.min(),lats.max(),nlats)
X, Y = m(*np.meshgrid(x, y))

and replace it with

X,Y = m(lons, lats)

-Jeff

– Jeffrey S. Whitaker Phone : (303)497-6313

Meteorologist FAX : (303)497-6449

NOAA/OAR/PSD R/PSD1 Email : Jeffrey.S.Whitaker@…259…
325 Broadway Office : Skaggs Research Cntr 1D-113
Boulder, CO, USA 80303-3328 Web : http://tinyurl.com/5telg


This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com


Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users