如何在faceting wrap中使用geom_text在几行上显示文本

时间:2017-03-28 07:54:58

标签: r ggplot2 paste facet geom-text

这是我的df:

df <- data.frame(annee = rep(c(2003,2004), times = 1, each = 3), sps = c("a", "b", "c"), nb = 1:3)

我创建了一个包含标签的列:

df$labels <- paste("nb", df$sps, "=", df$nb)

然后我做我的情节:

  ggplot(df, aes(nb)) + 
  geom_density(aes(fill = sps, colour = sps), alpha = 0.1) + 
  facet_wrap(~ annee) +
  geom_text(data=df, aes(x=8, y=2.5, label= labels), colour="black", inherit.aes=FALSE, parse=FALSE)

但是我的每个方面的文本都有问题:我希望有3行(每个sps一个)。

我尝试使用符号&#34; \ n&#34; ,但我未能尝试获取:  每年&#34; nb a = 1 \ n nb b = 2 \ n nb c = 3&#34;

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

您必须将想要分成几行的内容连接成一个单独的字符串。

newdf <- aggregate(labels ~ annee, data = df, FUN = paste, collapse = "\n")

ggplot(df, aes(nb)) + 
  geom_density(aes(fill = sps, colour = sps), alpha = 0.1) + 
  facet_wrap(~ annee) +
  geom_text(data = newdf, aes(x = 8, y = 2, label = labels), color = "black") +
  scale_x_continuous(limits = c(0, 11)) +
  scale_y_continuous(limits = c(0, 2.25))

答案 1 :(得分:2)

您可以为标签创建单独的data.frame来实现您的目标:


library(tidyverse)

df <- data.frame(annee = rep(c(2003,2004),
                             times = 1, each = 3),
                 sps = c("a", "b", "c"),
                 nb = 1:3)

# create labels in separate data.frame
label_df <- df %>% 
  mutate(labels = paste("nb", sps, "=", nb)) %>% 
  group_by(annee) %>% 
  summarise(labels = paste(labels, collapse = "\n")) %>% 
  mutate(x = 6.5,
         y = 2.2)


ggplot(df, aes(nb)) + 
  geom_density(aes(fill = sps, colour = sps), alpha = 0.1) + 
  facet_wrap(~annee) +
  geom_text(data = label_df, aes(x = x, y = y, label = labels)) +
  coord_cartesian(ylim = c(0, 2.4), xlim = c(1, 8))