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

Benjamin Root ben.v.root at gmail.com
Tue Oct 10 16:25:12 EDT 2017


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>


More information about the Matplotlib-users mailing list