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

Mauro Cavalcanti maurobio at gmail.com
Tue Oct 10 19:43:13 EDT 2017


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>


More information about the Matplotlib-users mailing list