ggplot2:添加另一个变量作为第二行x轴标签

时间:2017-06-16 03:36:22

标签: r ggplot2

使用此data.frame

> df
              var value percent
1 AAAA BBBB CCCCC  -0.5       9
2 FFFF DDDD CCCCC   0.3      13
3 BBBB NNNN DDDDD   0.7      17
4 NNNN MMMM BBBBB  -0.4      25

我想添加percent和括号之间的符号"像这样 (9%) "作为第二行x轴标签。

我这样做了如下 enter image description here

使用此脚本(遵循此answer

my.labels <- c(
  "AAAA BBBB CCCCC\n(9%)",
  "FFFF DDDD CCCCC\n(13%)" ,
  "BBBB NNNN DDDDD\n(17%)",
  "NNNN MMMM BBBBB\n(25%)"
)    

ggplot(df, aes(x = var, y = value))+
  geom_bar(stat ="identity", width = 0.4)+
  scale_x_discrete(labels = my.labels)

仅对4个变量执行此操作很好,但如果我有很多变量,则需要时间。我认为对于许多变量应该有一种更快/更有效的方法。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:3)

my.labels <- paste0(df$var, "\n (", df$percent, "%)")

ggplot(df, aes(x = var, y = value))+
  geom_bar(stat ="identity", width = 0.4)+
  scale_x_discrete(labels = my.labels)

enter image description here

编辑:

如果facet-wrapscales="free_x"同时实施,则以上内容无效:

 p <- ggplot(df, aes(x = var, y = value)) +
  geom_bar(stat ="identity", width = 0.4) 

 p + 
   facet_wrap(~var, scales="free_x") +
   scale_x_discrete(labels = my.labels)

enter image description here

要允许标签正确显示,请先将自定义标签添加回data.frame

df$lab <- my.labels

然后使用facet_wrap变量作为scale_x_discrete函数的中断值:

 p + 
   facet_wrap(~var, scales="free_x") +
   scale_x_discrete(labels = df$lab, breaks=df$var)

enter image description here