【问题标题】:Change stat_summary colours based on group and add text to the label in ggplot2 boxplot根据组更改 stat_summary 颜色并将文本添加到 ggplot2 boxplot 中的标签
【发布时间】:2017-11-16 20:57:22
【问题描述】:

根据这个问题:Add number of observations per group in ggplot2 boxplot,如何更改 stat_summary 的颜色?

下面是示例代码:

give.n <- function(x){
      return(c(y = median(x)*1.05, label = length(x))) 
    }    


p <- ggplot(mtcars, aes(factor(vs), mpg, colour = factor(am))) + 
      geom_boxplot() +
      stat_summary(fun.data = give.n, geom = "text", fun.y = median,
                   position = position_dodge(width = 0.75))
p

所以当我执行以下更改颜色时,它不起作用(它只给了我 1 个组合数字)

stat_summary(fun.data = give.n, geom = "text", fun.y = median,
                   position = position_dodge(width = 0.75), colour =   c("black", "red"))

当我执行以下添加文本“n=”时,它也不起作用。 (我尝试通过执行以下操作在函数本身中添加“n =”:

give.n <- function(x){
      return(c(y = median(x)*1.05, label = paste0("n=",length(x)))) 
    } 

但我收到以下错误:

 Error: Discrete value supplied to continuous scale

【问题讨论】:

    标签: r ggplot2 label


    【解决方案1】:

    对于颜色,您想使用scale_colour_manual 添加这些颜色,因此绘图调用如下所示:

    p <- 
        ggplot(mtcars, aes(factor(vs), mpg, colour = factor(am))) + 
        geom_boxplot() +
        stat_summary(fun.data = give.n, geom = "text", fun.y = median,
                   position = position_dodge(width = 0.75)) +
        scale_colour_manual(values = c("black", "red"))
    

    添加“n=”的答案是这个问题的重复:Use stat_summary to annotate plot with number of observations。您需要在give.n 函数中使用data.frame(...) 而不是c(...)

    give.n <- 
        function(x){
          return(data.frame(y = median(x)*1.05, label = paste0("n=",length(x)))) 
        } 
    

    编辑: 重新评论仅更改 stat_summary 项目的颜色,这证明有点棘手,因为我认为您不能拥有多个 scale_colour_manual 层。但是,在这种情况下,您可以将填充美学用于箱形图,并将颜色美学留给文本几何。 为了让它更干净,我从 ggplot(...) 调用中取出了颜色和填充美学,并将它们放在每个 geom 中:

    p <- 
        ggplot(mtcars, aes(factor(vs), mpg)) + 
        geom_boxplot(aes(fill = factor(am))) +
        stat_summary(aes(colour = factor(am)), fun.data = give.n, 
                     geom = "text", fun.y = median, position = position_dodge(width = 0.75)) +
        scale_colour_manual(values = c("black", "red"))
    

    如果你想为箱线图填充指定颜色,你可以使用scale_fill_manual(...)

    【讨论】:

    • 谢谢!不知何故,我忽略了你提到的帖子。这行得通!在单独的说明中,我只想更改 stat_summary 项目的颜色,也就是说,我想保持我的箱线图的颜色与现在一样,但是观察的数量是黑色和红色(例如)。你的建议改变了两者。我如何只更改 stat_summary 项目?谢谢!
    • @debbybeginner 这有点棘手,但解决方案是为箱线图使用填充美学,为 stat_summary 文本几何图形保留颜色美学。已更新答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多