根据组更改 stat_summary 颜色并向 ggplot2 boxplot 中的标签添加文本
Change stat_summary colours based on group and add text to the label 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
对于颜色,您想使用 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(...)
根据这个问题:
下面是示例代码:
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=" 的答案与此问题重复: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(...)