[R-sig-Geo] New (?) use of polypath() in package sp causing a problem?

Roger Bivand Roger.Bivand at nhh.no
Fri Aug 10 22:11:31 CEST 2012


On Fri, 10 Aug 2012, MacQueen, Don wrote:

> (see below)
>
>
> On 8/10/12 1:04 AM, "Roger Bivand" <Roger.Bivand at nhh.no> wrote:
>
>> On Fri, 10 Aug 2012, MacQueen, Don wrote:
>>
>>> I have encountered a problem I've never seen before.
>>>
>>> The problem is:
>>>
>>>> x11(type='Xlib')
>>>> plot(sfbound)
>>> Warning message:
>>> In polypath(x = mcrds[, 1], y = mcrds[, 2], border = border, col = col,
>>> :
>>> Path drawing not available for this device
>>>
>>> And nothing is plotted.
>>>
>>> The object sfbound is a SpatialPolygonsDataFrame object with one simple
>>> polygon in it.
>>> Previously I have had no problem plotting such objects with
>>> x11(type='Xlib').x11(type='cairo') succeeds.
>>>
>>>
>>> It looks very likely that this relates to this entry in NEWS for R
>>> 2.12.0:
>>>
>>> -- quote --
>>> Added support for polygons with holes to the graphics
>>> engine. This is implemented for the pdf(),
>>> postscript(), x11(type="cairo"), windows(),
>>> and quartz() devices (and associated raster formats),
>>> but not for x11(type="Xlib") or xfig() or
>>> pictex(). The user-level interface is the
>>> polypath() function in graphics and
>>> grid.path() in grid.
>>> -- end quote --
>>>
>>> That is, presuming a relatively recent change in sp in which polyplot()
>>> is
>>> now used and previously was not, the change described in NEWS would
>>> explain why I'm seeing this.
>>>
>>>
>>>
>>> The problem is, I have found that for plots in which a very large number
>>> of objects are being plotted, the Xlib version of X11() is much faster
>>> than the cairo version. And I frequently plot spatial objects with
>>> thousands of line segments in them, where the performance difference is
>>> substantial, to the point of making use of the cairo version
>>> intolerable.
>>>
>>> I guess the question is -- am I correct in this analysis?
>>> If so, do I have any alternative when I need to plot spatial objects
>>> with
>>> huge numbers of points/lines/polygons in them?
>>
>> Don,
>>
>> The analysis is correct (r1248). If the hole status of Polygon objects is
>> known to be correct, and the par(bg=) and pbg= values are set to match,
>> the plots will be the same. polypath analyses the polygon rings itself
>> and
>> provides transparency in polygon painting - it doesn't paint in holes.
>> The
>> legacy polygon function first painted the whole exterior ring, then
>> overpainted holes with the pbg= colour, which is "transparent" by
>> default.
>> For many purposes, polypath is preferable, but as you know, cairo is much
>> slower than X11. So using X11 ought still to be OK, in the plot method
>> set
>> usePolypath=FALSE. We can add back an option and set the argument by
>> default to that option if that would help.
>>
>> The details for the plot method in the code:
>>
>> https://r-forge.r-project.org/scm/viewvc.php/pkg/sp/R/SpatialPolygons-disp
>> layMethods.R?root=rspatial&view=log
>>
>> and for spplot methods look in the same repository.
>>
>> Hope this helps,
>>
>> Roger
>
> It does help, especially the pointer to usePolypath=FALSE, which lets me
> plot with X11/Xlib. Thank you.
>
> In terms of adding back an option, would that be a global option of some
> sort, so that users like me don't have to supply usePolypath=FALSE every
> time?  That would indeed be helpful, if it's not too much trouble.

Committed to the sp package in the rspatial project on R-Forge as revision 
1269. If you could check and see whether this works for you, I'd be 
grateful - you would add set_Polypath(FALSE) early in your script, and it 
should work everwhere plot() is called on a SpatialPolygons object.

Roger

>
> -Don
>
>>
>>>
>>> Thanks
>>> -Don
>>>
>>>
>>>> str(sfbound)
>>> Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
>>>  ..@ data       :'data.frame': 1 obs. of  1 variable:
>>>  .. ..$ name: Factor w/ 1 level "Boundary.kml": 1
>>>  ..@ polygons   :List of 1
>>>  .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
>>>  .. .. .. ..@ Polygons :List of 1
>>>  .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
>>>  .. .. .. .. .. .. ..@ labpt  : num [1:2] -121.7 37.7
>>>  .. .. .. .. .. .. ..@ area   : num 3.71e-06
>>>  .. .. .. .. .. .. ..@ hole   : logi FALSE
>>>  .. .. .. .. .. .. ..@ ringDir: int 1
>>>  .. .. .. .. .. .. ..@ coords : num [1:8, 1:2] -122 -122 -122 -122 -122
>>> ...
>>>  .. .. .. ..@ plotOrder: int 1
>>>  .. .. .. ..@ labpt    : num [1:2] -121.7 37.7
>>>  .. .. .. ..@ ID       : chr "1"
>>>  .. .. .. ..@ area     : num 3.71e-06
>>>  ..@ plotOrder  : int 1
>>>  ..@ bbox       : num [1:2, 1:2] -121.7 37.7 -121.7 37.7
>>>  .. ..- attr(*, "dimnames")=List of 2
>>>  .. .. ..$ : chr [1:2] "x" "y"
>>>  .. .. ..$ : chr [1:2] "min" "max"
>>>  ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
>>>  .. .. ..@ projargs: chr "+proj=longlat +ellps=GRS80 +datum=NAD83
>>> +no_defs +towgs84=0,0,0"
>>>
>>>
>>>> sessionInfo()
>>> R version 2.15.1 (2012-06-22)
>>> Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
>>>
>>> locale:
>>> [1] C
>>>
>>> attached base packages:
>>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>>
>>> other attached packages:
>>> [1] sp_0.9-99   rmacq_1.1-8
>>>
>>> loaded via a namespace (and not attached):
>>> [1] grid_2.15.1    lattice_0.20-6 tools_2.15.1
>>>
>>>
>>>
>>>
>>
>> --
>> Roger Bivand
>> Department of Economics, NHH Norwegian School of Economics,
>> Helleveien 30, N-5045 Bergen, Norway.
>> voice: +47 55 95 93 55; fax +47 55 95 95 43
>> e-mail: Roger.Bivand at nhh.no
>>
>
>

-- 
Roger Bivand
Department of Economics, NHH Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no



More information about the R-sig-Geo mailing list