[R-sig-Geo] merge ggplots into one with pipeline commands

Marta Rufino m@rt@@m@ru||no @end|ng |rom gm@||@com
Fri Feb 5 03:33:13 CET 2021


Hi.

Thank you so much!
Excellent! It works wonderfully.
It will be very useful.

Should I abuse of your knowledge, take advantage of this example and ask if
you or anyone knows how to limit the map range to the area of the datasets
'dat', without saving xlim/ylim outside the plot?

i.e. making p1 automatically limited to the geographic range of dat, inside
the ggplot code (and not plotting always the complete country)?

like this, but automatically within the ggplot code (I have to make many
maps, each with different areas):

# this is what I would like to get:
ggplot(data = dat, aes(x=lon, y=lat)) +
    borders("world",fill="antiquewhite1",colour="antiquewhite4")+
  coord_fixed(ylim=c(min(dat$lat), max(dat$lat)),xlim=c(min(dat$lon) ,
max(dat$lon)))+
geom_point()

# however, with pipeline, I would need to set xlim and ylim outside the
plot code
ggplot(data = dat, aes(x=lon, y=lat)) +
    borders("world",fill="antiquewhite1",colour="antiquewhite4")+
  coord_fixed(ylim=c(min(.data[[lat]]), max(.data[[lat]])),xlim=c(min(.
data[[lon]]) , max(.data[[lon]])))+
geom_point()
#
https://stackoverflow.com/questions/4856849/looping-over-variables-in-ggplot

# this does not work either (if I use dat it refers to all dat, not only
when fac==1):
dat %>%
  filter(fac==1) %>%
  { p1 +
    geom_point(data=., aes(x=lon, y=lat))+
coord_fixed(ylim=c(min(data$y), max(data$y)),xlim=c(min(data$lon) , max(
data$lon)))+
geom_point()
  }
#
https://stackoverflow.com/questions/44889239/unable-to-pass-the-ylim-argument-to-ggplot-in-a-function

Thank you very much once again!
Best regards,
M.

Kent Johnson <kent3737 using gmail.com> escreveu no dia quinta, 4/02/2021 à(s)
19:43:

> On Thu, Feb 4, 2021 at 6:01 AM <r-sig-geo-request using r-project.org> wrote
>
>> Message: 3
>> Date: Wed, 3 Feb 2021 16:10:17 +0000
>> From: Marta Rufino <marta.m.rufino using gmail.com>
>> To: r-sig-geo <r-sig-geo using r-project.org>
>> Subject: [R-sig-Geo] merge ggplots into one with pipeline commands
>> Message-ID:
>>         <
>> CAKSASLDyVVWgDJ6VT1ZWUEBoh8KbXufa+bv1UePi0YUABOz9CQ using mail.gmail.com>
>> Content-Type: text/plain; charset="utf-8"
>>
>> Hi,
>>
>> I want to make one only ggplot by merging/joining a base ggplot and a
>> ggplot resulting from a pipeline command (ddplyr).
>>
>> Here it is the reproducible example:
>>
>> # my base plot, for example:
>> # https://rpubs.com/MRufino/Portugal
>> p1 <- ggplot() +
>>     borders("world",
>>             fill="antiquewhite1",
>>             colour="antiquewhite4")+
>>   coord_fixed(ylim=c(36.6, 42.0), xlim=c(-10 ,-7))+
>>   theme_minimal()+
>>   theme(panel.background = element_rect(fill = 'powderblue'),
>>         panel.grid.major = element_blank(),
>>         panel.grid.minor = element_blank())+
>>   xlab("Longitude")+ ylab("Latitude")
>>  p1
>>
>> # now, if I want to add this plot to another ggplot resulting from a
>> pipeline command, how can I do it?
>> dat <- data.frame(lat=c(40.3,38.4,39),
>>            lon = c(-10,-8,-9),
>>            fac = c(1,2,1))
>>
>> # pipeline ggplot
>> dat %>%
>>   filter(fac==1) %>%
>>   ggplot()+
>>   geom_point(aes(x=lon, y=lat))
>>
>
> This will do it. Enclosing the pipe expression in { } lets you put the
> piped-in variable where you need it using '.'.
>
> dat %>%
>   filter(fac==1) %>%
>   { p1 +
>     geom_point(data=., aes(x=lon, y=lat))
>   }
>
> Kent Johnson
> Cambridge, MA
>

	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list