broccoli
broccoli

Reputation: 4846

ggplot2 facetting with layers of data

I'm facing the following problem. I've the following two data frames set up

x = c(1,2,3,4,1,2,3,4)
f = c(rep('a',4),rep('b',4))
y = c(2,4,5,6,9,4,2,10)
z = data.frame(x=x,f=f,y=y)

and the other data frame is

x1 = c(2,2.5,3.1,2.8,3.4,3.5)
y1 = c(1,1.2,1,2,3,2)
f1 = c(rep('a',3),rep('b',3))
z1 = data.frame(x=x1,f=f1,y=y1)

What I would like to be able to do is plot the first data frame z using faceting based on the column f. This is easy to do. However, my second data frame represents coordinates of two triangles I would like to plot on each of the plots. How do I work with layers to get this done? I tried the following, but it did not help.

p = ggplot() +
 layer(
 data=z,
 mapping = aes(x,y),
 geom="line"
) +
layer(
 data = z1,
 mapping = aes(x,y),
 geom="polygon",
 color="blue"
) +
facet_grid(f ~ .)

Thanks much for the attention & help.

Upvotes: 3

Views: 2023

Answers (1)

Andrie
Andrie

Reputation: 179558

The important thing is that your facets should have the same column name in each data source:

Set up the data. (I use the same data as you, but note that you don't need to predefine your vectors - simply do it inside the data.frame function. This reduces clutter in your workspace:

library(ggplot2)
z <- data.frame(
  x = c(1,2,3,4,1,2,3,4),
  y = c(2,4,5,6,9,4,2,10),
  f = c(rep('a',4),rep('b',4))
)

z1 <- data.frame(
  x = c(2,2.5,3.1,2.8,3.4,3.5),
  y = c(1,1.2,1,2,3,2),
  f = c(rep('a',3),rep('b',3))
)

The call to ggplot is virtually identical to your original code. I just saved a few keystrokes by not using layer, but the geoms directly:

ggplot() +
    geom_line(data=z, aes(x,y)) +
    geom_polygon(data=z1, aes(x,y), color="blue") +
    facet_grid(f ~ .)

enter image description here

Upvotes: 9

Related Questions