【问题标题】:ggplot2: add another variable as second line x axis labelggplot2:添加另一个变量作为第二行 x 轴标签
【发布时间】:2017-06-16 03:36:22
【问题描述】:

使用这个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 和括号之间的符号“like this (9%)”作为第二行 x 轴标签。

我按照下面的方法做到了

使用这个脚本(跟随这个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 个变量执行此操作很好,但如果我有很多变量,则需要时间。我认为应该有一种更快/更有效的方法来处理许多变量。任何建议将不胜感激。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:
    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)
    

    编辑:

    如果实现了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)
    

    为了让标签正确显示,首先将自定义标签添加回 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)
    

    【讨论】:

    • 如果它是一个分面网格并且我使用 scales = "free_x" 来删除未使用的级别怎么办?
    • 非常感谢您的详细回答。现在工作正常。
    猜你喜欢
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多