Alex Stapleton wrote:
> 2008/7/16 Jeff Whitaker <[EMAIL PROTECTED]>:
>   
>> Alex Stapleton wrote:
>>     
>>> Not sure if this is the right place to send this, can't seem to find a
>>> dedicated bugs list or issue tracker. Or much discussion regarding the
>>> basemap toolkit at all really.
>>>
>>> Trying to savefig some Basemap instances causes the following
>>> exception in the Cairo backend. Seems to work alright using the Agg
>>> backend but the fill doesn't seem to come out properly. The sea gets
>>> colored as well as the continents.
>>>
>>> Traceback (most recent call last):
>>>  File "map.py", line 48, in <module>
>>>    plt.savefig("map.png", dpi=100)
>>>  File "/usr/lib/python2.5/site-packages/matplotlib/pyplot.py", line
>>> 286, in savefig
>>>    return fig.savefig(*args, **kwargs)
>>>  File "/usr/lib/python2.5/site-packages/matplotlib/figure.py", line
>>> 1033, in savefig
>>>    self.canvas.print_figure(*args, **kwargs)
>>>  File "/usr/lib/python2.5/site-packages/matplotlib/backend_bases.py",
>>> line 1301, in print_figure
>>>    **kwargs)
>>>  File
>>> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_cairo.py",
>>> line 406, in print_png
>>>    self.figure.draw (renderer)
>>>  File "/usr/lib/python2.5/site-packages/matplotlib/figure.py", line
>>> 833, in draw
>>>    for a in self.axes: a.draw(renderer)
>>>  File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 1539, in
>>> draw
>>>    a.draw(renderer)
>>>  File "/usr/lib/python2.5/site-packages/matplotlib/patches.py", line
>>> 285, in draw
>>>    renderer.draw_path(gc, tpath, affine, rgbFace)
>>>  File
>>> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_cairo.py",
>>> line 140, in draw_path
>>>    raise ValueError("The Cairo backend can not draw paths longer than
>>> 18980 points.")
>>> ValueError: The Cairo backend can not draw paths longer than 18980 points.
>>>
>>> Here's a short reduction
>>>
>>> import matplotlib
>>> matplotlib.use("Cairo")
>>> from mpl_toolkits.basemap import Basemap
>>> import matplotlib.pyplot as plt
>>>
>>> map = Basemap(projection='ortho',
>>>              llcrnrlon=-12.7, llcrnrlat=49,
>>>              urcrnrlon=4.7,  urcrnrlat=61,
>>>              lat_0 = 50, lon_0 = 0,
>>>              lat_ts=50,
>>>              resolution='i')
>>> map.drawcoastlines(linewidth=0.5)
>>> map.drawcountries(linewidth=0.5)
>>> map.drawstates(linewidth=0.5)
>>> map.drawmapboundary()
>>> plt.savefig("map.png", dpi=100)
>>>
>>>
>>>       
>> Alex:  I don't have the Cairo backend installed, but I bet it would work if
>> you changed resolution='i' to resolution='l'.  Seems like a pretty severe
>> limitation of the backend though.
>>
>> -Jeff
>>     
>
> I suppose it's not up to matplotlib to work around silly limits in
> Cairo :) What about the fill issue with the Agg backend when doingfil
> zoomed in ortho maps? Am I doing something wrong?
>   
Alex: I see in the example you sent that the whole map gets filled when 
the fillcontinents method is used.  Is this what you mean?  There's a 
KNOWN_BUGS file with this entry:

* The fillcontinents method doesn't always do the right thing.  Matplotlib
always tries to fill the inside of a polygon.  Under certain situations,
what is the inside of a coastline polygon can be ambiguous, and the
outside may be filled instead of the inside.  To trigger this,
run the garp.py example with lon=-71,lat=-33 (Santiago, Chile).
Workaround - mask the land areas with the drawlsmask method instead of
filling the coastline polygons.

Using the orthographic projection to plot a local region is probably not 
the best idea though - it's really intended for the global domain to 
mimic what a satellite would see.  I'd try the transverse mercator 
('tmerc' - as in the highres.py example), or lambert conformal ('lcc') 
instead. The fillcontinents method does the right thing in both cases 
with your map region.

BTW:  lat_ts doesn't do anything for projection='ortho'.

-Jeff

-- 
Jeffrey S. Whitaker         Phone : (303)497-6313
NOAA/OAR/CDC  R/PSD1        FAX   : (303)497-6449
325 Broadway                Boulder, CO, USA 80305-3328


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to