Аннотация только к первому аспекту ggplot в R?

#r #ggplot2 #text #annotations #facet-wrap

#r #ggplot2 #текст #аннотации #перенос фасета

Вопрос:

У меня есть следующий код, который создает a ggplot , который имеет text (т. Е. «Калибровку») для обоих facets . Я хочу text , чтобы он отображался facet только на первом. Я попробовал несколько вещей, но безуспешно. Любая помощь будет оценена.

 library(ggplot2)
library(lubridate)

set.seed(123)

DF1 <- data.frame(Date = seq(as.Date("2001-01-01"), to = as.Date("2005-12-31"), by = "1 month"),
                  Ob = runif(60,1,5), L95 =runif(60, 0,4), U95 = runif(60,2,7), Sim = runif(60,1,5),
                  Loc = rep("Upstream", 60))

DF2 <- data.frame(Date = seq(as.Date("2001-01-01"), to = as.Date("2005-12-31"), by = "1 month"),
                  Ob = runif(60,1,5), L95 =runif(60, 0,4), U95 = runif(60,2,7), Sim = runif(60,1,5),
                  Loc = rep("Downstream", 60))

DF <- dplyr::bind_rows(DF1,DF2)

DF$Loc <- factor(DF$Loc, levels = c("Upstream","Downstream"))


ggplot(DF, aes(x = Date)) 
  geom_ribbon(aes(ymin = L95, ymax = U95), fill = "grey30", alpha = 0.4) 
  geom_line(aes(y = Ob, color = "blue"), size = 1 ) 
  geom_line(aes(y = Sim, color = "black"), size =  1, linetype = "dashed") 
  geom_vline(xintercept = as.Date("2004-12-01"),color = "red", size = 1.30) 
  facet_wrap(~ Loc, ncol = 1, scales = "free_y")  
  theme_bw() 
  annotate(geom = "text", x = as.Date("2002-01-01"), y = 4, label = "Calibration")
 

введите описание изображения здесь

Ответ №1:

Попробуйте этот трюк:

 library(ggplot2)
#Code
ggplot(DF, aes(x = Date)) 
  geom_ribbon(aes(ymin = L95, ymax = U95), fill = "grey30", alpha = 0.4) 
  geom_line(aes(y = Ob, color = "blue"), size = 1 ) 
  geom_line(aes(y = Sim, color = "black"), size =  1, linetype = "dashed") 
  geom_vline(xintercept = as.Date("2004-12-01"),color = "red", size = 1.30) 
  facet_wrap(~ Loc, ncol = 1, scales = "free_y")  
  theme_bw() 
  geom_text(data=data.frame(Date=as.Date("2002-01-01"),y=4,
                            label = "Calibration",Loc='Upstream'),
            aes(y=y,label=label))
 

Вывод:

введите описание изображения здесь

Вы также можете использовать Loc=unique(DF$Loc)[1] в geom_text() стороне. Это приведет к тому же результату.

Комментарии:

1. Это то, что я хочу — однако, когда я запускал код, он изменял расположение facets . это означает, что восходящий facet поток теперь находится во второй строке, а нисходящий поток — в первой строке.

2. @Hydro Попробуйте внести это небольшое изменение в свои данные DF$Loc <- factor(DF$Loc, levels = c("Upstream","Downstream"),ordered=T) и повторно запустите весь код. Дайте мне знать, если проблема не устранена!

3. та же проблема — порядок изменения facets get, даже с изменениями, которые вы предложили.

4. @Hydro Мы используем те же данные из вопроса?

5. Хорошо — ваши вторые предложения (использование Loc=unique(DF$Loc)[1] в geom_text() ) сработали. Да, я использовал те же данные. Большое спасибо. Все еще интересно, почему первый вариант не сработал.