我的数据格式如下:
df = data.frame(data = rnorm(33), group = rep(1:3, times = 10:12))
实际数据有更多行和五个组,但是结构是相同的。我对可视化控制组(在这种情况下为1)与其他使用qq-plots的组之间的数据分布差异感兴趣。我可以通过以下方式制作所需的情节:
par(mfrow = c(1, 2))
qqplot(df$data[df$group == 1], df$data[df$group == 2])
abline(0, 1)
qqplot(df$data[df$group == 1], df$data[df$group == 3])
abline(0, 1)
这只是两个并排的qq图,其中x轴分布来自第1组,y轴来自第2组和第3组。通过清洗该图是可行的,但我宁愿将与geom_qq
库中的facet_grid
和ggplot2
一起使用。我最接近解决方案的是:
ggplot(data = df, aes(sample = data)) +
geom_qq() +
facet_grid(~group)
但是,这使用x轴的正常分位数,而我想使用对照组的经验分位数(因此第一个面板应该是一条直线)。有一个选项可以更改geom_qq
函数中的分布,这似乎很有希望,但是我似乎无法正确定义它。
任何帮助将不胜感激。干杯!
答案 0 :(得分:0)
事实证明,这没有我想像的那么神秘。发布我的后代答案。事实证明,您可以轻松地计算出坐标并使用geom_point
。此解决方案使用pivot_longer
中的tidyr
。
plotSeq = seq(0.001, 0.999, length = 200)
makeQ = function(index, seq = plotSeq){
quantile(df$data[df$group == index], seq)
}
qqplotData = data.table(controlQ = makeQ(1),
`Treatment 1` = makeQ(2),
`Treatment 2` = makeQ(3)) %>%
pivot_longer(2:3, names_to = "Treatment", values_to = "Quantiles")
ggplot(qqplotData, aes(x = controlQ, y = Quantiles)) +
geom_step(cex = 2) +
geom_abline(slope = 1, intercept = 0) +
facet_wrap(~Treatment, nrow = 2)