我想有一个分组的箱形图,其中哪些是由stat_summary定义的。在changing-whisker-definition的帮助下,我编写了以下代码:
# Data
xdf2 <- data.frame(month = rep(1:6,each=100)
, grp = rep(c('A','B'), 50*6)
)
xdf2$m <- rpois(n=nrow(xdf2),10)
# Definition of whiskers
f <- function(x) {
r <- quantile(x, probs = c(0.10, 0.25, 0.5, 0.75, 0.90))
names(r) <- c("ymin", "lower", "middle", "upper", "ymax")
r
}
# Add points outside of whiskers
o <- function(x) {
subset(x, x < quantile(x,probs=0.1) | quantile(x,probs=0.9) < x)
}
# Plot
ggplot(data = xdf2
, aes(factor(month),m, color=grp)
) +
stat_summary(fun.data = f
, geom="boxplot"
, position=position_dodge(width=1)
, size=1
) +
stat_summary(fun.y = o, geom="point", position=position_dodge(width=1)) +
scale_color_manual(values = c("gray30","darkgrey"),labels = c("AAA","BBB")) +
theme_bw()
给出了以下图表:
我想要执行一些更改:
我很乐意为你提供帮助。非常感谢。
答案 0 :(得分:3)
将fill
美学映射到grp
并为其添加类似的比例。我使用稍微不同的颜色来使平均值可见。
要更改箱线图宽度,请使用ggsave
和各种width
参数,框图将自动调整。如果您想在它们之间添加一些空间,您将不得不作弊,见下文。
与stat_summary
一起修改宽度并不容易:虽然width
和geom_bar
有一个geom_boxplot
参数,但我无法做到与stat_summary
一起正常工作。相反,我在scale_x
使用了一些肮脏的技巧。
K <- length(unique(xdf2$month))
lev <- seq_len(1 + 2 * K)
xdf2$month2 <- factor(2 * xdf2$month,
levels = lev)
ggplot(data = xdf2, aes(month2, m, color = grp, fill = grp)) +
stat_summary(fun.data = f, geom="boxplot",
position=position_dodge(width=1.5), size=1) +
stat_summary(fun.y = o, geom="point", position=position_dodge(width=1.5)) +
scale_color_manual(values = c("gray30","darkgrey"),labels = c("AAA","BBB")) +
scale_fill_manual(values = c("gray20","grey75"),labels = c("AAA","BBB")) +
theme_bw() +
scale_x_discrete(limits = lev, breaks = 1:K*2, labels = 1:K)
在width
内的position_dodge
游戏以进行其他调整。