Likan Zhan Likan Zhan - 5 months ago 22
R Question

`annotate` in `ggplot2` reports errors when combined with `facet_grid`

I want to add two annotations to the ggplot graph.
When the graph doesn't contain a

facet_grid
, such as
p1
, adding such a
annotate
layer works fine, i.e.,
q1
. However, when I add a
facet_grid
layer, to the original graph, i.e.,
p2
, then adding the same 'annotate' layer, i.e.,
q2
results in an error reporting:


Error: Aesthetics must be either length 1 or the same as the data (4): label


Any suggestion? Thanks.

PS, the version of the package ggplot2 I used is 2.2.1.


p1 <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
p2 <- p1 + facet_grid(vs~.)
q1 <- p1 + annotate("text", x = 2:3, y = 20:21, label = c("my label", "label 2"))
q2 <- p2 + annotate("text", x = 2:3, y = 20:21, label = c("my label", "label 2"))

Answer Source

The following is the answer I got from the package author, Hadley Wickham:

https://github.com/tidyverse/ggplot2/issues/2221

Unfortunately it's very hard to have annotate() do this automatically. Instead just do it "by hand" by creating the dataset yourself.

library(ggplot2)
df <- data.frame(wt = 2:3, mpg = 20:21, label = c("my label", "label 2"))
ggplot(mtcars, aes(wt, mpg)) + 
geom_point() +
geom_text(aes(label = label), data = df) + 
facet_grid(vs ~ .)