繁体   English   中英

根据组更改stat_summary颜色并将文本添加到ggplot2 boxplot中的标签

[英]Change stat_summary colours based on group and add text to the label in ggplot2 boxplot

提出以下问题: 在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

对于颜色,您想使用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 =”的答案是该问题的重复: 使用stat_summary用观察数注释图 您需要在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(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM