用每个 bar/group 的观察次数注释 ggplot boxplot 方面
Annotate ggplot boxplot facets with number of observations per bar/group
我已经查看了类似这些的其他问题 (Annotate ggplot2 facets with number of observations per facet),但没有找到对带有 facets 的箱线图的单个条形图进行注释的答案。
这是我创建箱线图的示例代码:
require(ggplot2)
require(plyr)
mms <- data.frame(deliciousness = rnorm(100),
type=sample(as.factor(c("peanut", "regular")),
100, replace=TRUE),
color=sample(as.factor(c("red", "green", "yellow", "brown")),
100, replace=TRUE))
ggplot(mms, aes(x=type, y=deliciousness, fill=type)) +
geom_boxplot(notch=TRUE)+
facet_wrap(~ color,nrow=3, scales = "free")+
xlab("")+
scale_fill_manual(values = c("coral1", "lightcyan1", "olivedrab1"))+
theme(legend.position="none")
这里是对应的情节:
现在我想为颜色的每个方面单独注释每组的观察次数 (peanut/regular),如我的绘图所示:
我已经做的是用以下代码总结每种颜色和每组 (peanut/regular) 的 dpyr 观察次数:
mms.cor <- ddply(.data=mms,
.(type,color),
summarize,
n=paste("n =", length(deliciousness)))
但是,我不知道如何将这个数据摘要添加到 ggplot 中。如何做到这一点?
使用 dplyr
和 ggplot2
尝试这种方法。您可以使用 mutate()
构建标签,然后根据 deliciousness
的最大值格式化为只有一个值。之后 geom_text()
可以根据需要启用文本。这里的代码:
library(dplyr)
library(ggplot2)
#Data
mms <- data.frame(deliciousness = rnorm(100),
type=sample(as.factor(c("peanut", "regular")),
100, replace=TRUE),
color=sample(as.factor(c("red", "green", "yellow", "brown")),
100, replace=TRUE))
#Plot
mms %>% group_by(color,type) %>% mutate(N=n()) %>%
mutate(N=ifelse(deliciousness==max(deliciousness,na.rm=T),paste0('n=',N),NA)) %>%
ggplot(aes(x=type, y=deliciousness, fill=type,label=N)) +
geom_boxplot(notch=TRUE)+
geom_text(fontface='bold')+
facet_wrap(~ color,nrow=3, scales = "free")+
xlab("")+
scale_fill_manual(values = c("coral1", "lightcyan1", "olivedrab1"))+
theme(legend.position="none")
输出:
我已经查看了类似这些的其他问题 (Annotate ggplot2 facets with number of observations per facet),但没有找到对带有 facets 的箱线图的单个条形图进行注释的答案。
这是我创建箱线图的示例代码:
require(ggplot2)
require(plyr)
mms <- data.frame(deliciousness = rnorm(100),
type=sample(as.factor(c("peanut", "regular")),
100, replace=TRUE),
color=sample(as.factor(c("red", "green", "yellow", "brown")),
100, replace=TRUE))
ggplot(mms, aes(x=type, y=deliciousness, fill=type)) +
geom_boxplot(notch=TRUE)+
facet_wrap(~ color,nrow=3, scales = "free")+
xlab("")+
scale_fill_manual(values = c("coral1", "lightcyan1", "olivedrab1"))+
theme(legend.position="none")
这里是对应的情节:
现在我想为颜色的每个方面单独注释每组的观察次数 (peanut/regular),如我的绘图所示:
我已经做的是用以下代码总结每种颜色和每组 (peanut/regular) 的 dpyr 观察次数:
mms.cor <- ddply(.data=mms,
.(type,color),
summarize,
n=paste("n =", length(deliciousness)))
但是,我不知道如何将这个数据摘要添加到 ggplot 中。如何做到这一点?
使用 dplyr
和 ggplot2
尝试这种方法。您可以使用 mutate()
构建标签,然后根据 deliciousness
的最大值格式化为只有一个值。之后 geom_text()
可以根据需要启用文本。这里的代码:
library(dplyr)
library(ggplot2)
#Data
mms <- data.frame(deliciousness = rnorm(100),
type=sample(as.factor(c("peanut", "regular")),
100, replace=TRUE),
color=sample(as.factor(c("red", "green", "yellow", "brown")),
100, replace=TRUE))
#Plot
mms %>% group_by(color,type) %>% mutate(N=n()) %>%
mutate(N=ifelse(deliciousness==max(deliciousness,na.rm=T),paste0('n=',N),NA)) %>%
ggplot(aes(x=type, y=deliciousness, fill=type,label=N)) +
geom_boxplot(notch=TRUE)+
geom_text(fontface='bold')+
facet_wrap(~ color,nrow=3, scales = "free")+
xlab("")+
scale_fill_manual(values = c("coral1", "lightcyan1", "olivedrab1"))+
theme(legend.position="none")
输出: