Problem using imshow with Matplotlib/Basemap

Dear ALL,

I have a simple dataset of longitudes/latitudes (see the attached csv
file).

From such data, I want to generate a grid like this:

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 2 0 0 0 0
0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 3 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

which gives the number of data records in each cell of the grid, using one
of the variables in the dataset ("spp") as a categorical (grouping) factor.

From this grid, I then want to create a heat map, superimposed on a

Matplotlib/Basemap.

I wrote some code which does what I want (see the attachments).

It (mostly) works, but te problem is that the grid image is not being
displayed correctly: as shown in the attached figure, it appears too small,
and in the lower left corner of the map, instead of where it should be (the
West coast of Africa, along the Gulf of Guinea).

Thanks in advance for any assistance you can provide.

Best regards,

···

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171008/add52fd2/attachment-0001.html>
-------------- next part --------------
import csv
import numpy as np
from mpl_toolkits.basemap import Basemap
from matplotlib import cm as cmap
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings("ignore")

#read input data
with open('testdata.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    headers = reader.next()
    input_data = list(reader)

#grid dimensions with one-degree resolution
lat_inf, lon_inf = 0, 0
lat_sup, lon_sup = 90, 360
resolution = 1

latitude, longitude = [], []
latitude = range(lat_inf, lat_sup, resolution)
longitude = range(lon_inf, lon_sup, resolution)

#create output grid
output_grid = []
for i in latitude:
   output_grid.append([])
   for j in longitude:
       output_grid[i].append(0)

#traverse the input_data evaluating the lat, lon coordinates
#summing +1 in the output_grid[latitude][longitude].
for row in input_data:
   lat = int(row[2])
   lon = int(row[3])
   #sp = row[1]

   #check its indexes
   i_lat = latitude.index(lat)
   i_lon = longitude.index(lon)

   #increase counter
   output_grid[i_lat][i_lon] += 1

output_grid = np.array(output_grid, np.int16)

#create map
m = Basemap()
m.drawcoastlines(linewidth=0.25)

#display image
im = m.imshow(output_grid.transpose(), cmap='summer', origin='lower', aspect='auto', interpolation='none')
m.colorbar(im)
plt.show()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: testdata.csv
Type: text/csv
Size: 277 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171008/add52fd2/attachment-0001.csv>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Figure_1.png
Type: image/png
Size: 63619 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171008/add52fd2/attachment-0001.png>

First, you shouldn't need to transpose your image... that'll effectively
rotate the data by 90 degrees. Second, you didn't specify the extents of
your image, so Basemap is putting everything starting at coordinate 0,0 in
the default projection.

If you specify the extent keyword argument to imshow as the (lon1, lat1,
lon2, lat2) tuple for the lower-left and upper right corners, you won't
even need the origin='lower', and you definitely won't need the transpose.

Cheers!
Ben Root

···

On Sun, Oct 8, 2017 at 2:33 PM, Mauro Cavalcanti <maurobio at gmail.com> wrote:

Dear ALL,

I have a simple dataset of longitudes/latitudes (see the attached csv
file).

From such data, I want to generate a grid like this:

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 2 0 0 0 0
0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 3 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

which gives the number of data records in each cell of the grid, using one
of the variables in the dataset ("spp") as a categorical (grouping) factor.

From this grid, I then want to create a heat map, superimposed on a
Matplotlib/Basemap.

I wrote some code which does what I want (see the attachments).

It (mostly) works, but te problem is that the grid image is not being
displayed correctly: as shown in the attached figure, it appears too small,
and in the lower left corner of the map, instead of where it should be (the
West coast of Africa, along the Gulf of Guinea).

Thanks in advance for any assistance you can provide.

Best regards,

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171009/031f3dfc/attachment.html>

Hi,

Thanks for you reply and suggestions.

I changed the imshow call to:

im = m.imshow(grilla_salida, cmap='summer', extent=(lon_inf, lat_inf,
lon_sup, lat_sup), aspect='auto', interpolation='none')

However, the figure is stil wrong (see attachment).

Maybe if instead of imshow, should I use meshgrid/pcolormesh?

Best regards,

2017-10-09 11:29 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

···

First, you shouldn't need to transpose your image... that'll effectively
rotate the data by 90 degrees. Second, you didn't specify the extents of
your image, so Basemap is putting everything starting at coordinate 0,0 in
the default projection.

If you specify the extent keyword argument to imshow as the (lon1, lat1,
lon2, lat2) tuple for the lower-left and upper right corners, you won't
even need the origin='lower', and you definitely won't need the transpose.

Cheers!
Ben Root

On Sun, Oct 8, 2017 at 2:33 PM, Mauro Cavalcanti <maurobio at gmail.com> > wrote:

Dear ALL,

I have a simple dataset of longitudes/latitudes (see the attached csv
file).

From such data, I want to generate a grid like this:

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 2 0 0 0 0
0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 3 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

which gives the number of data records in each cell of the grid, using
one of the variables in the dataset ("spp") as a categorical (grouping)
factor.

From this grid, I then want to create a heat map, superimposed on a
Matplotlib/Basemap.

I wrote some code which does what I want (see the attachments).

It (mostly) works, but te problem is that the grid image is not being
displayed correctly: as shown in the attached figure, it appears too small,
and in the lower left corner of the map, instead of where it should be (the
West coast of Africa, along the Gulf of Guinea).

Thanks in advance for any assistance you can provide.

Best regards,

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171009/e51604c0/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Figure_1.png
Type: image/png
Size: 47105 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171009/e51604c0/attachment-0001.png>

Ah, the problem was that by default, the limits for a Basemap goes from
-180 to 180, and -90 to 90. If you do:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf,
            urcrnrlat=lat_sup, urcrnrlon=lon_sup)

Then things line up correctly, and you don't need the origin keyword
argument, the transpose, or even the extent argument.

In fact, there might even be a bug, as I would have expected specifying the
extent should have worked regardless of the original bounds. Might need to
look into that.

Cheers!
Ben Root

···

On Mon, Oct 9, 2017 at 7:54 PM, Mauro Cavalcanti <maurobio at gmail.com> wrote:

Hi,

Thanks for you reply and suggestions.

I changed the imshow call to:

im = m.imshow(grilla_salida, cmap='summer', extent=(lon_inf, lat_inf,
lon_sup, lat_sup), aspect='auto', interpolation='none')

However, the figure is stil wrong (see attachment).

Maybe if instead of imshow, should I use meshgrid/pcolormesh?

Best regards,

2017-10-09 11:29 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

First, you shouldn't need to transpose your image... that'll effectively
rotate the data by 90 degrees. Second, you didn't specify the extents of
your image, so Basemap is putting everything starting at coordinate 0,0 in
the default projection.

If you specify the extent keyword argument to imshow as the (lon1, lat1,
lon2, lat2) tuple for the lower-left and upper right corners, you won't
even need the origin='lower', and you definitely won't need the transpose.

Cheers!
Ben Root

On Sun, Oct 8, 2017 at 2:33 PM, Mauro Cavalcanti <maurobio at gmail.com> >> wrote:

Dear ALL,

I have a simple dataset of longitudes/latitudes (see the attached csv
file).

From such data, I want to generate a grid like this:

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 2 0 0 0 0
0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 3 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

which gives the number of data records in each cell of the grid, using
one of the variables in the dataset ("spp") as a categorical (grouping)
factor.

From this grid, I then want to create a heat map, superimposed on a
Matplotlib/Basemap.

I wrote some code which does what I want (see the attachments).

It (mostly) works, but te problem is that the grid image is not being
displayed correctly: as shown in the attached figure, it appears too small,
and in the lower left corner of the map, instead of where it should be (the
West coast of Africa, along the Gulf of Guinea).

Thanks in advance for any assistance you can provide.

Best regards,

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171010/23aacfbc/attachment.html>

Dear Ben,

Thanks a lot again for your help and patience.

After modifying the call to Basemap according to your suggestion:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf, urcrnrlat=lat_sup,
urcrnrlon=lon_sup)

the grid is correctly displayed where it belongs (thr west coast of
Africa). But now I got a map centered at the Pacific basin, with the grid
appearing on the lower left corner of it! In fact, See the attached image.
I would like a conventional map centered around the Atlantic basin (ie.,
with center coordinates at lat_0=0 and long_0=0).

After using the superb Matplotlib for almost a decade (in the beginning, I
even got some help here from the legendary John Hunter!), I nonetheless
feel somewhat ashamed of having found a potential bug in the library...

All the best,

2017-10-10 12:20 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

···

Ah, the problem was that by default, the limits for a Basemap goes from
-180 to 180, and -90 to 90. If you do:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf,
            urcrnrlat=lat_sup, urcrnrlon=lon_sup)

Then things line up correctly, and you don't need the origin keyword
argument, the transpose, or even the extent argument.

In fact, there might even be a bug, as I would have expected specifying
the extent should have worked regardless of the original bounds. Might need
to look into that.

Cheers!
Ben Root

On Mon, Oct 9, 2017 at 7:54 PM, Mauro Cavalcanti <maurobio at gmail.com> > wrote:

Hi,

Thanks for you reply and suggestions.

I changed the imshow call to:

im = m.imshow(grilla_salida, cmap='summer', extent=(lon_inf, lat_inf,
lon_sup, lat_sup), aspect='auto', interpolation='none')

However, the figure is stil wrong (see attachment).

Maybe if instead of imshow, should I use meshgrid/pcolormesh?

Best regards,

2017-10-09 11:29 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

First, you shouldn't need to transpose your image... that'll effectively
rotate the data by 90 degrees. Second, you didn't specify the extents of
your image, so Basemap is putting everything starting at coordinate 0,0 in
the default projection.

If you specify the extent keyword argument to imshow as the (lon1, lat1,
lon2, lat2) tuple for the lower-left and upper right corners, you won't
even need the origin='lower', and you definitely won't need the transpose.

Cheers!
Ben Root

On Sun, Oct 8, 2017 at 2:33 PM, Mauro Cavalcanti <maurobio at gmail.com> >>> wrote:

Dear ALL,

I have a simple dataset of longitudes/latitudes (see the attached csv
file).

From such data, I want to generate a grid like this:

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 2 0 0 0 0
0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 3 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

which gives the number of data records in each cell of the grid, using
one of the variables in the dataset ("spp") as a categorical (grouping)
factor.

From this grid, I then want to create a heat map, superimposed on a
Matplotlib/Basemap.

I wrote some code which does what I want (see the attachments).

It (mostly) works, but te problem is that the grid image is not being
displayed correctly: as shown in the attached figure, it appears too small,
and in the lower left corner of the map, instead of where it should be (the
West coast of Africa, along the Gulf of Guinea).

Thanks in advance for any assistance you can provide.

Best regards,

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171010/858d8ecb/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Figure_1.png
Type: image/png
Size: 69775 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171010/858d8ecb/attachment-0001.png>

So, the problem here is that what you are asking for is in conflict with
the settings. You are giving bounding box that starts at llcrnrlon=lon_inf
and goes to urcrnrlon=lon_sup, and that is the extent of the data you are
providing, too. But you want to view it in a different bounds. It is
possible to get what you want, but it starts to get tricky at this point.

Before venturing further, I should point out to you that Basemap is
effectively deprecated. Its support will be terminated in 2020. The CartoPy
project, also built on top of matplotlib, is a far superior library, and I
think would be much easier for you to use. It doesn't do everything that
basemap does yet, but the things that it does do, it does better. I suggest
checking it out before we go any further here.

Cheers!
Ben Root

···

On Tue, Oct 10, 2017 at 2:57 PM, Mauro Cavalcanti <maurobio at gmail.com> wrote:

Dear Ben,

Thanks a lot again for your help and patience.

After modifying the call to Basemap according to your suggestion:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf, urcrnrlat=lat_sup,
urcrnrlon=lon_sup)

the grid is correctly displayed where it belongs (thr west coast of
Africa). But now I got a map centered at the Pacific basin, with the grid
appearing on the lower left corner of it! In fact, See the attached image.
I would like a conventional map centered around the Atlantic basin (ie.,
with center coordinates at lat_0=0 and long_0=0).

After using the superb Matplotlib for almost a decade (in the beginning, I
even got some help here from the legendary John Hunter!), I nonetheless
feel somewhat ashamed of having found a potential bug in the library...

All the best,

2017-10-10 12:20 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

Ah, the problem was that by default, the limits for a Basemap goes from
-180 to 180, and -90 to 90. If you do:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf,
            urcrnrlat=lat_sup, urcrnrlon=lon_sup)

Then things line up correctly, and you don't need the origin keyword
argument, the transpose, or even the extent argument.

In fact, there might even be a bug, as I would have expected specifying
the extent should have worked regardless of the original bounds. Might need
to look into that.

Cheers!
Ben Root

On Mon, Oct 9, 2017 at 7:54 PM, Mauro Cavalcanti <maurobio at gmail.com> >> wrote:

Hi,

Thanks for you reply and suggestions.

I changed the imshow call to:

im = m.imshow(grilla_salida, cmap='summer', extent=(lon_inf, lat_inf,
lon_sup, lat_sup), aspect='auto', interpolation='none')

However, the figure is stil wrong (see attachment).

Maybe if instead of imshow, should I use meshgrid/pcolormesh?

Best regards,

2017-10-09 11:29 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

First, you shouldn't need to transpose your image... that'll
effectively rotate the data by 90 degrees. Second, you didn't specify the
extents of your image, so Basemap is putting everything starting at
coordinate 0,0 in the default projection.

If you specify the extent keyword argument to imshow as the (lon1,
lat1, lon2, lat2) tuple for the lower-left and upper right corners, you
won't even need the origin='lower', and you definitely won't need the
transpose.

Cheers!
Ben Root

On Sun, Oct 8, 2017 at 2:33 PM, Mauro Cavalcanti <maurobio at gmail.com> >>>> wrote:

Dear ALL,

I have a simple dataset of longitudes/latitudes (see the attached csv
file).

From such data, I want to generate a grid like this:

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 2 0 0 0 0
0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 3 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

which gives the number of data records in each cell of the grid, using
one of the variables in the dataset ("spp") as a categorical (grouping)
factor.

From this grid, I then want to create a heat map, superimposed on a
Matplotlib/Basemap.

I wrote some code which does what I want (see the attachments).

It (mostly) works, but te problem is that the grid image is not being
displayed correctly: as shown in the attached figure, it appears too small,
and in the lower left corner of the map, instead of where it should be (the
West coast of Africa, along the Gulf of Guinea).

Thanks in advance for any assistance you can provide.

Best regards,

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171010/8303ebf9/attachment.html>

Dear Ben,

Sure, I am aware of Cartopy and have been following its development.
However, I am afraid it is not yet mature enough for the kind of
application I have been working on (a PyQt-based multiplatform desktop
application for mapping biodiversity data). Documentation is also not as
good as that already available for Matplotlib/Basemap. But I surely intend
to take the time to eventually port my application to Cartopy!

That said, I will be very grateful if you can help me with the 'tricky'
part of my problem. I have also another test version using meshgrid instead
of imshow. It looks promising because only the gridded data is displayed on
the map (while imshow covers the whole map). However, as the attached image
show, I have to fiddle with the grid limits when creating the mesh, and
even so the grid is not yet plotted in the correct position.

With warmest regards,

2017-10-10 17:25 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

···

So, the problem here is that what you are asking for is in conflict with
the settings. You are giving bounding box that starts at llcrnrlon=lon_inf
and goes to urcrnrlon=lon_sup, and that is the extent of the data you are
providing, too. But you want to view it in a different bounds. It is
possible to get what you want, but it starts to get tricky at this point.

Before venturing further, I should point out to you that Basemap is
effectively deprecated. Its support will be terminated in 2020. The CartoPy
project, also built on top of matplotlib, is a far superior library, and I
think would be much easier for you to use. It doesn't do everything that
basemap does yet, but the things that it does do, it does better. I suggest
checking it out before we go any further here.

Cheers!
Ben Root

On Tue, Oct 10, 2017 at 2:57 PM, Mauro Cavalcanti <maurobio at gmail.com> > wrote:

Dear Ben,

Thanks a lot again for your help and patience.

After modifying the call to Basemap according to your suggestion:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf, urcrnrlat=lat_sup,
urcrnrlon=lon_sup)

the grid is correctly displayed where it belongs (thr west coast of
Africa). But now I got a map centered at the Pacific basin, with the grid
appearing on the lower left corner of it! In fact, See the attached image.
I would like a conventional map centered around the Atlantic basin (ie.,
with center coordinates at lat_0=0 and long_0=0).

After using the superb Matplotlib for almost a decade (in the beginning,
I even got some help here from the legendary John Hunter!), I nonetheless
feel somewhat ashamed of having found a potential bug in the library...

All the best,

2017-10-10 12:20 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

Ah, the problem was that by default, the limits for a Basemap goes from
-180 to 180, and -90 to 90. If you do:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf,
            urcrnrlat=lat_sup, urcrnrlon=lon_sup)

Then things line up correctly, and you don't need the origin keyword
argument, the transpose, or even the extent argument.

In fact, there might even be a bug, as I would have expected specifying
the extent should have worked regardless of the original bounds. Might need
to look into that.

Cheers!
Ben Root

On Mon, Oct 9, 2017 at 7:54 PM, Mauro Cavalcanti <maurobio at gmail.com> >>> wrote:

Hi,

Thanks for you reply and suggestions.

I changed the imshow call to:

im = m.imshow(grilla_salida, cmap='summer', extent=(lon_inf, lat_inf,
lon_sup, lat_sup), aspect='auto', interpolation='none')

However, the figure is stil wrong (see attachment).

Maybe if instead of imshow, should I use meshgrid/pcolormesh?

Best regards,

2017-10-09 11:29 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

First, you shouldn't need to transpose your image... that'll
effectively rotate the data by 90 degrees. Second, you didn't specify the
extents of your image, so Basemap is putting everything starting at
coordinate 0,0 in the default projection.

If you specify the extent keyword argument to imshow as the (lon1,
lat1, lon2, lat2) tuple for the lower-left and upper right corners, you
won't even need the origin='lower', and you definitely won't need the
transpose.

Cheers!
Ben Root

On Sun, Oct 8, 2017 at 2:33 PM, Mauro Cavalcanti <maurobio at gmail.com> >>>>> wrote:

Dear ALL,

I have a simple dataset of longitudes/latitudes (see the attached csv
file).

From such data, I want to generate a grid like this:

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 2 0 0 0 0
0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 3 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

which gives the number of data records in each cell of the grid,
using one of the variables in the dataset ("spp") as a categorical
(grouping) factor.

From this grid, I then want to create a heat map, superimposed on a
Matplotlib/Basemap.

I wrote some code which does what I want (see the attachments).

It (mostly) works, but te problem is that the grid image is not being
displayed correctly: as shown in the attached figure, it appears too small,
and in the lower left corner of the map, instead of where it should be (the
West coast of Africa, along the Gulf of Guinea).

Thanks in advance for any assistance you can provide.

Best regards,

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171010/4449e2dc/attachment-0001.html>
-------------- next part --------------
import csv
import numpy as np
from mpl_toolkits.basemap import Basemap
from matplotlib import cm as cmap
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings("ignore")

#read input data
with open('testdata.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    headers = reader.next()
    input_data = list(reader)

#grid dimensions with one-degree resolution
lat_inf, lon_inf = 0, 0
lat_sup, lon_sup = 90, 360
resolution = 1

latitude, longitude = [], []
latitude = range(lat_inf, lat_sup, resolution)
longitude = range(lon_inf, lon_sup, resolution)

#create output grid
output_grid = []
for i in latitude:
   output_grid.append([])
   for j in longitude:
       output_grid[i].append(0)

#traverse the input_data evaluating the lat, lon coordinates
#summing +1 in the output_grid[latitude][longitude].
for row in input_data:
   lat = int(row[2])
   lon = int(row[3])
   #sp = row[1]

   #check its indexes
   i_lat = latitude.index(lat)
   i_lon = longitude.index(lon)

   #increase counter
   output_grid[i_lat][i_lon] += 1

output_grid = np.array(output_grid, np.int16)

lons,lats = np.meshgrid(np.linspace(1, 30, output_grid.shape[1]+1),
            np.linspace(2, 60, output_grid.shape[0]+1))

#create map
m = Basemap()
m.drawcoastlines(linewidth=0.25)

X, Y = m(lons,lats)

#display image
pc = m.pcolormesh(X, Y, output_grid, cmap='summer')
m.colorbar(pc)
plt.show()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Figure_1.png
Type: image/png
Size: 15345 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171010/4449e2dc/attachment-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: testdata.csv
Type: text/csv
Size: 277 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171010/4449e2dc/attachment-0001.csv>

I?m not 100% following, but can?t you just `np.roll` your data by N/2 to get it between -180 and +180 instead of 0 and 360, and set llcrnrlon=-180 and urcrnrlon=180?

I didn?t test, so sorry if that is a dumb suggestion...

Cheers, Jody

···

On 10 Oct 2017, at 16:04 PM, Mauro Cavalcanti <maurobio at gmail.com> wrote:

Dear Ben,

Sure, I am aware of Cartopy and have been following its development. However, I am afraid it is not yet mature enough for the kind of application I have been working on (a PyQt-based multiplatform desktop application for mapping biodiversity data). Documentation is also not as good as that already available for Matplotlib/Basemap. But I surely intend to take the time to eventually port my application to Cartopy!

That said, I will be very grateful if you can help me with the 'tricky' part of my problem. I have also another test version using meshgrid instead of imshow. It looks promising because only the gridded data is displayed on the map (while imshow covers the whole map). However, as the attached image show, I have to fiddle with the grid limits when creating the mesh, and even so the grid is not yet plotted in the correct position.

With warmest regards,

2017-10-10 17:25 GMT-03:00 Benjamin Root <ben.v.root at gmail.com <mailto:ben.v.root at gmail.com>>:
So, the problem here is that what you are asking for is in conflict with the settings. You are giving bounding box that starts at llcrnrlon=lon_inf and goes to urcrnrlon=lon_sup, and that is the extent of the data you are providing, too. But you want to view it in a different bounds. It is possible to get what you want, but it starts to get tricky at this point.

Before venturing further, I should point out to you that Basemap is effectively deprecated. Its support will be terminated in 2020. The CartoPy project, also built on top of matplotlib, is a far superior library, and I think would be much easier for you to use. It doesn't do everything that basemap does yet, but the things that it does do, it does better. I suggest checking it out before we go any further here.

Cheers!
Ben Root

On Tue, Oct 10, 2017 at 2:57 PM, Mauro Cavalcanti <maurobio at gmail.com <mailto:maurobio at gmail.com>> wrote:
Dear Ben,

Thanks a lot again for your help and patience.

After modifying the call to Basemap according to your suggestion:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf, urcrnrlat=lat_sup, urcrnrlon=lon_sup)

the grid is correctly displayed where it belongs (thr west coast of Africa). But now I got a map centered at the Pacific basin, with the grid appearing on the lower left corner of it! In fact, See the attached image. I would like a conventional map centered around the Atlantic basin (ie., with center coordinates at lat_0=0 and long_0=0).

After using the superb Matplotlib for almost a decade (in the beginning, I even got some help here from the legendary John Hunter!), I nonetheless feel somewhat ashamed of having found a potential bug in the library...

All the best,

2017-10-10 12:20 GMT-03:00 Benjamin Root <ben.v.root at gmail.com <mailto:ben.v.root at gmail.com>>:
Ah, the problem was that by default, the limits for a Basemap goes from -180 to 180, and -90 to 90. If you do:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf,
            urcrnrlat=lat_sup, urcrnrlon=lon_sup)

Then things line up correctly, and you don't need the origin keyword argument, the transpose, or even the extent argument.

In fact, there might even be a bug, as I would have expected specifying the extent should have worked regardless of the original bounds. Might need to look into that.

Cheers!
Ben Root

On Mon, Oct 9, 2017 at 7:54 PM, Mauro Cavalcanti <maurobio at gmail.com <mailto:maurobio at gmail.com>> wrote:
Hi,

Thanks for you reply and suggestions.

I changed the imshow call to:

im = m.imshow(grilla_salida, cmap='summer', extent=(lon_inf, lat_inf, lon_sup, lat_sup), aspect='auto', interpolation='none')

However, the figure is stil wrong (see attachment).

Maybe if instead of imshow, should I use meshgrid/pcolormesh?

Best regards,

2017-10-09 11:29 GMT-03:00 Benjamin Root <ben.v.root at gmail.com <mailto:ben.v.root at gmail.com>>:
First, you shouldn't need to transpose your image... that'll effectively rotate the data by 90 degrees. Second, you didn't specify the extents of your image, so Basemap is putting everything starting at coordinate 0,0 in the default projection.

If you specify the extent keyword argument to imshow as the (lon1, lat1, lon2, lat2) tuple for the lower-left and upper right corners, you won't even need the origin='lower', and you definitely won't need the transpose.

Cheers!
Ben Root

On Sun, Oct 8, 2017 at 2:33 PM, Mauro Cavalcanti <maurobio at gmail.com <mailto:maurobio at gmail.com>> wrote:
Dear ALL,

I have a simple dataset of longitudes/latitudes (see the attached csv file).

From such data, I want to generate a grid like this:

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 2 0 0 0 0
0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 3 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

which gives the number of data records in each cell of the grid, using one of the variables in the dataset ("spp") as a categorical (grouping) factor.

From this grid, I then want to create a heat map, superimposed on a Matplotlib/Basemap.

I wrote some code which does what I want (see the attachments).

It (mostly) works, but te problem is that the grid image is not being displayed correctly: as shown in the attached figure, it appears too small, and in the lower left corner of the map, instead of where it should be (the West coast of Africa, along the Gulf of Guinea).

Thanks in advance for any assistance you can provide.

Best regards,

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com <mailto:maurobio at gmail.com>
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org <mailto:Matplotlib-users at python.org>
https://mail.python.org/mailman/listinfo/matplotlib-users

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com <mailto:maurobio at gmail.com>
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com <mailto:maurobio at gmail.com>
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com <mailto:maurobio at gmail.com>
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."
<meshgrid.py><Figure_1.png><testdata.csv>_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org <mailto:Matplotlib-users at python.org>
https://mail.python.org/mailman/listinfo/matplotlib-users

--
Jody Klymak
http://web.uvic.ca/~jklymak/

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171010/b5ef6ad4/attachment-0001.html>

Dear Jody,

Thank you very much for your suggestion! It looks interesting and I will
play with it. (By the way, I don't consider any suggestion here as "dumb"
and value very much all of them.)

All the best,

2017-10-10 20:10 GMT-03:00 Jody Klymak <jklymak at uvic.ca>:

···

I?m not 100% following, but can?t you just `np.roll` your data by N/2 to
get it between -180 and +180 instead of 0 and 360, and set llcrnrlon=-180
and urcrnrlon=180?

I didn?t test, so sorry if that is a dumb suggestion...

Cheers, Jody

On 10 Oct 2017, at 16:04 PM, Mauro Cavalcanti <maurobio at gmail.com> wrote:

Dear Ben,

Sure, I am aware of Cartopy and have been following its development.
However, I am afraid it is not yet mature enough for the kind of
application I have been working on (a PyQt-based multiplatform desktop
application for mapping biodiversity data). Documentation is also not as
good as that already available for Matplotlib/Basemap. But I surely intend
to take the time to eventually port my application to Cartopy!

That said, I will be very grateful if you can help me with the 'tricky'
part of my problem. I have also another test version using meshgrid instead
of imshow. It looks promising because only the gridded data is displayed on
the map (while imshow covers the whole map). However, as the attached image
show, I have to fiddle with the grid limits when creating the mesh, and
even so the grid is not yet plotted in the correct position.

With warmest regards,

2017-10-10 17:25 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

So, the problem here is that what you are asking for is in conflict with
the settings. You are giving bounding box that starts at llcrnrlon=lon_inf
and goes to urcrnrlon=lon_sup, and that is the extent of the data you are
providing, too. But you want to view it in a different bounds. It is
possible to get what you want, but it starts to get tricky at this point.

Before venturing further, I should point out to you that Basemap is
effectively deprecated. Its support will be terminated in 2020. The CartoPy
project, also built on top of matplotlib, is a far superior library, and I
think would be much easier for you to use. It doesn't do everything that
basemap does yet, but the things that it does do, it does better. I suggest
checking it out before we go any further here.

Cheers!
Ben Root

On Tue, Oct 10, 2017 at 2:57 PM, Mauro Cavalcanti <maurobio at gmail.com> >> wrote:

Dear Ben,

Thanks a lot again for your help and patience.

After modifying the call to Basemap according to your suggestion:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf, urcrnrlat=lat_sup,
urcrnrlon=lon_sup)

the grid is correctly displayed where it belongs (thr west coast of
Africa). But now I got a map centered at the Pacific basin, with the grid
appearing on the lower left corner of it! In fact, See the attached image.
I would like a conventional map centered around the Atlantic basin (ie.,
with center coordinates at lat_0=0 and long_0=0).

After using the superb Matplotlib for almost a decade (in the beginning,
I even got some help here from the legendary John Hunter!), I nonetheless
feel somewhat ashamed of having found a potential bug in the library...

All the best,

2017-10-10 12:20 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

Ah, the problem was that by default, the limits for a Basemap goes from
-180 to 180, and -90 to 90. If you do:

m = Basemap(llcrnrlat=lat_inf, llcrnrlon=lon_inf,
            urcrnrlat=lat_sup, urcrnrlon=lon_sup)

Then things line up correctly, and you don't need the origin keyword
argument, the transpose, or even the extent argument.

In fact, there might even be a bug, as I would have expected specifying
the extent should have worked regardless of the original bounds. Might need
to look into that.

Cheers!
Ben Root

On Mon, Oct 9, 2017 at 7:54 PM, Mauro Cavalcanti <maurobio at gmail.com> >>>> wrote:

Hi,

Thanks for you reply and suggestions.

I changed the imshow call to:

im = m.imshow(grilla_salida, cmap='summer', extent=(lon_inf, lat_inf,
lon_sup, lat_sup), aspect='auto', interpolation='none')

However, the figure is stil wrong (see attachment).

Maybe if instead of imshow, should I use meshgrid/pcolormesh?

Best regards,

2017-10-09 11:29 GMT-03:00 Benjamin Root <ben.v.root at gmail.com>:

First, you shouldn't need to transpose your image... that'll
effectively rotate the data by 90 degrees. Second, you didn't specify the
extents of your image, so Basemap is putting everything starting at
coordinate 0,0 in the default projection.

If you specify the extent keyword argument to imshow as the (lon1,
lat1, lon2, lat2) tuple for the lower-left and upper right corners, you
won't even need the origin='lower', and you definitely won't need the
transpose.

Cheers!
Ben Root

On Sun, Oct 8, 2017 at 2:33 PM, Mauro Cavalcanti <maurobio at gmail.com> >>>>>> wrote:

Dear ALL,

I have a simple dataset of longitudes/latitudes (see the attached
csv file).

From such data, I want to generate a grid like this:

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 2 0 0 0 0
0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 3 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

which gives the number of data records in each cell of the grid,
using one of the variables in the dataset ("spp") as a categorical
(grouping) factor.

From this grid, I then want to create a heat map, superimposed on a
Matplotlib/Basemap.

I wrote some code which does what I want (see the attachments).

It (mostly) works, but te problem is that the grid image is not
being displayed correctly: as shown in the attached figure, it appears too
small, and in the lower left corner of the map, instead of where it should
be (the West coast of Africa, along the Gulf of Guinea).

Thanks in advance for any assistance you can provide.

Best regards,

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."
<meshgrid.py><Figure_1.png><testdata.csv>_________________
______________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
https://mail.python.org/mailman/listinfo/matplotlib-users

--
Jody Klymak
http://web.uvic.ca/~jklymak/

--
Dr. Mauro J. Cavalcanti
E-mail: maurobio at gmail.com
Web: http://sites.google.com/site/maurobio
"Life is complex. It consists of real and imaginary parts."
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20171010/7102eb6b/attachment-0001.html>