Etienne Low-Décarie
Etienne Low-Décarie

Reputation: 13443

How to subset data for additional geoms while using facets in ggplot2?

I want additional 'geoms' to only apply to a subset of the initial data. I would like this subset to be from each units created by facets=~.

My trials using subletting of either the data or of the plotted variables leads to subsetting of the whole data set, rather than the subletting of the units created by 'facets=~' and in two different ways (apparently dependant on the sorting of the data).

This difficulty is appears with any 'geom' while using 'facets'

library(ggplot2)

test.data<-data.frame(factor=rep(c("small", "big"), each=9),
                              x=c(c(1,2,3,3,3,2,1,1,1), 2*c(1,2,3,3,3,2,1,1,1)),
                              y=c(c(1,1,1,2,3,3,3,2,1), 2*c(1,1,1,2,3,3,3,2,1)))


factor x y
1   small 1 1
2   small 2 1
3   small 3 1
4   small 3 2
5   small 3 3
6   small 2 3
7   small 1 3
8   small 1 2
9   small 1 1
10    big 2 2
11    big 4 2
12    big 6 2
13    big 6 4
14    big 6 6
15    big 4 6
16    big 2 6
17    big 2 4
18    big 2 2


qplot(data=test.data,
      x=x,
      y=y,
      geom="polygon",
      facets=~factor)+
      geom_polygon(data=test.data[c(2,3,4,5,6,2),],
                   aes(x=x,
                       y=y),
                   fill=I("red"))

enter image description here

qplot(data=test.data,
      x=x,
      y=y,
      geom="polygon",
      facets=~factor)+
        geom_polygon(aes(x=x[c(2,3,4,5,6,2)],
                         y=y[c(2,3,4,5,6,2)]),
                     fill=I("red"))

enter image description here

Upvotes: 1

Views: 532

Answers (1)

Etienne Low-D&#233;carie
Etienne Low-D&#233;carie

Reputation: 13443

The answer is to subset the data in a first step.

library(ggplot2)
library(plyr)

test.data<-data.frame(factor=rep(c("small", "big"), each=9),
                      x=c(c(1,2,3,3,3,2,1,1,1), 2*c(1,2,3,3,3,2,1,1,1)),
                      y=c(c(1,1,1,2,3,3,3,2,1), 2*c(1,1,1,2,3,3,3,2,1)))

subset.test<-ddply(.data=test.data,
                   .variables="factor",
                   function(data){
                     data[c(2,3,4,5,6,2),]})

qplot(data=test.data,
      x=x,
      y=y,
      geom="polygon",
      facets=~factor)+
        geom_polygon(data=subset.test,
                     fill=I("red"))

enter image description here

Upvotes: 2

Related Questions