此处是我的代码:
require(ggplot2)
value <- rnorm(40, mean = 10, sd = 1)
variable <- c(rep('A', 20), rep('B', 20))
group <- rep(c('Control', 'Disease'), 20)
data <- data.frame(value, variable, group)
ggplot(data, aes(x=variable, y=value)) +
geom_boxplot(aes(fill=group)) +
geom_point(aes())
这将箱形图按照我想要的方式分组。但是,所有组的分数都是重叠的,我希望将它分成几组。我该怎么做呢?
答案 0 :(得分:13)
使用position_dodge()
获取积分,并在group=group
的{{1}}内添加aes()
。
geom_point()
答案 1 :(得分:7)
我不知道这是什么时候推出的,但是有一个名为position_jitterdodge
的新功能,可以简化这一点,无论你是否想要抖动。
用法:
ggplot(data, aes(x=variable, y=value, fill=group)) +
geom_boxplot() +
geom_point(position=position_jitterdodge())
# or, if you dont need jittering
# geom_point(position=position_jitterdodge(jitter.width = 0, jitter.height = 0))
http://ggplot2.tidyverse.org/reference/position_jitterdodge.html
答案 2 :(得分:0)
您也可以尝试ggbeeswarm
。
在这里,我比较了geom_beeswarm
和geom_quasirandom
的输出:
library(ggbeeswarm)
library(ggplot2)
ggplot(data, aes(x=variable, y=value, fill=group)) +
geom_boxplot() +
geom_beeswarm(dodge.width=0.75) +
geom_quasirandom(dodge.width=.75, col=2)
答案 3 :(得分:-1)
这是尝试将Didzis的建议应用于数据集,其中并非所有组都有异常值,因此这些点不与正确的方框对齐。
数据文件: https://cmu.box.com/shared/static/2hxp2oms5et1ktr9hukdr539b6svq1cg.rds
require(data.table)
require(ggplot2)
d <- readRDS("2hxp2oms5et1ktr9hukdr539b6svq1cg.rds")
ggplot(d) +
geom_boxplot(aes(x=factor(game),y=N,fill=.group),outlier.shape=NA) +
geom_point(data=dd.sum1[,.SD[which(N %in% boxplot.stats(N)$out)],by=game][,.group:=factor(.group,levels=.groups)][,],aes(x=factor(game),y=N,color=.group,group=.group),
position=position_dodge(width=0.75),
size=.5) +
facet_grid (type~., scales="free_x", space="free_x") +
xlab("Game number") +
ylab("Count") +
scale_color_brewer("Group",palette="Set1",drop=FALSE) +
scale_fill_brewer("Group",palette="Set1",drop=FALSE) +
theme(axis.text.x=element_text(size=7),legend.position="top")