[R-sig-Geo] ggmap::fortify()

Edzer Pebesma edzer.pebesma at uni-muenster.de
Tue Dec 10 09:44:36 CET 2013



On 12/10/2013 09:38 AM, Agustin Lobo wrote:
> Thanks.
> 
> The example with an spatial polygons DF in p. 159 of
> http://journal.r-project.org/archive/2013-1/kahle-wickham.pdf
> works nicely.
> 
> Instead, fortify() refuses processing spatial poins or pixels DF
> with an error:
> Error: ggplot2 doesn't know how to deal with data of class
> SpatialPixelsDataFrame
> 
> Based on what you say, using
> adf <- dataframe(a)
> where a is an spatial points DF in epsg 4326 (== CRS("+proj=longlat
> +ellps=WGS84 +no_defs"))
> results into a dataframe adf that is as the table of a but including
> the coordinates as well.
> Then doing the equivalent to that explained in the pdf for the
> polygons seems to work.
> It might be that for the case of spatial points DF, dataframe() is
> enough and fortify() is just not required.

data.frame(), not dataframe()

for educational purposes, I'd prefer

as.data.frame(a)

# or

as(a, "data.frame")

> 
> Agus
> 
> 
> 
> On Mon, Dec 9, 2013 at 7:18 PM, Barry Rowlingson
> <b.rowlingson at lancaster.ac.uk> wrote:
>> Because that's how it works.
>>
>> ggplot likes to have everything in as long a data frame as possible,
>> rather than a wide data frame. So to plot some polygons with
>> geom_polygon, for example, you have to create a data frame with one
>> row per point, and each polygon has a separate id variable (see
>> ?geom_polygon for example).
>>
>> Same is true for ggmap - fortify puts all the coordinates of each
>> vector of every polygon into a data frame, adds an id variable and a
>> bunch of other things for the plot order and whether its a hole or not
>> etc. Then ggmap uses that to reconstruct the individual polygons to
>> draw them. Its the ggplot way. Stick everything into as long a data
>> frame as conceivably possible given the data. Once you realise that,
>> you'll start to 'get' ggplot.
>>
>> If you want to use ggplot with SpatialPoints, just get the
>> coordinates(sppts) and turn into a data frame with x and y coords.
>>
>> But essentially I don't think ggplot plays nicely with sp class objects.
>>
>> You can't pass spatial*dataframes into ggplot even if you aren;t using
>> the spatial components, for example using the scot_BNG from ?readOGR:
>>
>> It has X_COOR and Y_COOR attributes, lets try and plot those (you
>> could use any attributes, even non-spatial ones here)
>>
>>  > ggplot(scot_BNG,aes(x=X_COOR,y=Y_COOR))+geom_point()
>> Regions defined for each Polygons
>> Error in eval(expr, envir, enclos) : object 'X_COOR' not found
>>
>>  - basically it won't treat it like a vanilla data frame. I don't know
>> what its trying to do. It seems to have some idea that its got
>> polygons, but then it just gives up.
>>
>> You have to convert to a plain vanilla data frame first:
>>
>>
>>  > scot_BNGd=data.frame(scot_BNG)
>>  > ggplot(scot_BNGd,aes(x=X_COOR,y=Y_COOR))+geom_point()
>>
>>  - works
>>
>> such is code.
>>
>>
>>
>>
>> On Mon, Dec 9, 2013 at 5:53 PM, Agustin Lobo <alobolistas at gmail.com> wrote:
>>> Does anyone know why function fortify() (to be run before plotting the
>>> object with qmap) accepts spatial polygons DF and not
>>> spatial points DF or spatial pixels DF?
>>> Thanks
>>>
>>> Agus
>>>
>>> _______________________________________________
>>> R-sig-Geo mailing list
>>> R-sig-Geo at r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo at r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
> 
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
> 

-- 
Edzer Pebesma
Institute for Geoinformatics (ifgi), University of Münster
Heisenbergstraße 2, 48149 Münster, Germany. Phone: +49 251
83 33081 http://ifgi.uni-muenster.de GPG key ID 0xAC227795

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 555 bytes
Desc: OpenPGP digital signature
URL: <https://stat.ethz.ch/pipermail/r-sig-geo/attachments/20131210/e0ce42fb/attachment.bin>


More information about the R-sig-Geo mailing list