一格多qqplots和单个abline ggplot2 R

时间:2018-11-23 20:26:25

标签: r ggplot2

借用示例QQ plot: More than two data,如何在ggplot2中实现呢?我只需要one abline

样本数据:

set.seed(10)
   dat <- data.frame(Observed = rnorm(20), sim1= rnorm(20), sim2 = rnorm(20),sim3 = rnorm(20),sim4 = rnorm(20),sim5 = rnorm(20),sim6 = rnorm(20))

sim1...sim6应该具有不同的颜色。

欢迎提出所有建议。

1 个答案:

答案 0 :(得分:6)

ggplot2中使用stat_qq进行直截了当,然后将数据的范围从宽变长。

library(tidyverse)

set.seed(10)
dat <- data.frame(Observed = rnorm(20), sim1= rnorm(20), sim2 = rnorm(20),sim3 = rnorm(20),sim4 = rnorm(20),sim5 = rnorm(20),sim6 = rnorm(20))

plot <- dat %>% 
  gather(variable, value, -Observed) %>% 
  ggplot(aes(sample = value, color = variable)) +
  geom_abline() +
  stat_qq() 

# All in one
plot

如果您希望沿着比较变量制作多个构面或较小倍数,则可能会有所帮助。

# Facets!
plot +
  facet_wrap(~variable)

如果您想提供自己的观察结果,而不是幻想,让qqplot做繁重的工作,但设置plot.it = FALSE,它将为您返回x / y坐标的列表QQ图。使用purrr::map_dfr进行一些迭代,您可以执行以下操作:

library(tidyverse)

set.seed(10)
dat <- data.frame(Observed = rnorm(20), sim1 = rnorm(20), sim2 = rnorm(20),sim3 = rnorm(20),sim4 = rnorm(20),sim5 = rnorm(20),sim6 = rnorm(20))

plot_data <- map_dfr(names(dat)[-1], ~as_tibble(qqplot(dat[[.x]], dat$Observed, plot.it = FALSE)) %>% 
                   mutate(id = .x))

ggplot(plot_data, aes(x, y, color = id)) +
  geom_point() +
  geom_abline() +
  facet_wrap(~id)

reprex package(v0.2.1)于2018-11-25创建