[Matplotlib-users] Problem using imshow with Matplotlib/Basemap

Mauro Cavalcanti maurobio at gmail.com
Tue Oct 10 14:57:01 EDT 2017


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>


More information about the Matplotlib-users mailing list