R 如何在ggplot2中用2个示例绘制QQ图?

R 如何在ggplot2中用2个示例绘制QQ图?,r,ggplot2,R,Ggplot2,我想用x作为一个样本,y作为另一个样本来绘制QQ图,而不是使用ggplot2绘制x轴=理论和y轴=样本的普通QQ图。有人知道怎么做吗 常见的是,例如: ggplot(df, aes(sample=sample)) + stat_qq() 我可以用qqplot函数来实现这一点 qqplot(sample1,sample2) 但它似乎无法使用grid.arrange显示多个绘图。或者可能有人知道在一个图上绘制多个子qqplot的其他方法?不清楚这是否是您的意思,但您可以在同一个图上添加两个st

我想用x作为一个样本,y作为另一个样本来绘制QQ图,而不是使用ggplot2绘制x轴=理论和y轴=样本的普通QQ图。有人知道怎么做吗

常见的是,例如:

ggplot(df, aes(sample=sample)) + stat_qq() 
我可以用qqplot函数来实现这一点

qqplot(sample1,sample2)

但它似乎无法使用grid.arrange显示多个绘图。或者可能有人知道在一个图上绘制多个子qqplot的其他方法?

不清楚这是否是您的意思,但您可以在同一个图上添加两个stat_qq调用:

图书馆GGPLOT2 第69集
样本1不清楚这是否是你的意思,但你可以在同一个图上添加两个stat_qq调用:

图书馆GGPLOT2 第69集 样本1 统计qq电话给出

qplot调用给出

统计qq电话给出

qplot调用给出


我正在为这个函数寻找一个ggplot2等价物:所以我想它更接近第二个图。也许我很困惑,这第二个图和散点图不同吗?我在想第二个代码中会出现“geom_qq”或“stat_qq”之类的术语。@Helena是的,第二个版本就像链接的qqPlot的ggplot版本,您可以通过运行我上面的代码然后运行qqPlotsample1、sample2轻松测试。您将看到绘制的点完全相同。只有当两个向量长度相同时,才会出现这种情况。请记住,如果对长度为n的数字向量进行排序,那么在新的排列中,第i个元素将是i/n个经验分位数。换句话说,在我们的示例中,排序样本1的第50个元素也是它的第50个百分位数;样本2也是如此。这意味着当你绘制两个相同长度的排序向量时,你绘制的是经验分位数和经验分位数,所以你得到了一个经验qqplot。这与普通散点图不同,因为您事先独立地对x和y值进行了排序,而在普通散点图中没有这样做。情况更为复杂,但如果向量长度不同,则情况类似。qqPlot也可以处理这种情况,但是如果向量的长度相同,那么只需首先对每个向量进行排序,就可以得到具有ggplot所有优点的经验qqPlot。解释非常清楚,代码也非常有效。非常感谢,艾伦!我正在为这个函数寻找一个ggplot2等价物:所以我想它更接近第二个图。也许我很困惑,这第二个图和散点图不同吗?我在想第二个代码中会出现“geom_qq”或“stat_qq”之类的术语。@Helena是的,第二个版本就像链接的qqPlot的ggplot版本,您可以通过运行我上面的代码然后运行qqPlotsample1、sample2轻松测试。您将看到绘制的点完全相同。只有当两个向量长度相同时,才会出现这种情况。请记住,如果对长度为n的数字向量进行排序,那么在新的排列中,第i个元素将是i/n个经验分位数。换句话说,在我们的示例中,排序样本1的第50个元素也是它的第50个百分位数;样本2也是如此。这意味着当你绘制两个相同长度的排序向量时,你绘制的是经验分位数和经验分位数,所以你得到了一个经验qqplot。这与普通散点图不同,因为您事先独立地对x和y值进行了排序,而在普通散点图中没有这样做。情况更为复杂,但如果向量长度不同,则情况类似。qqPlot也可以处理这种情况,但是如果向量的长度相同,那么只需首先对每个向量进行排序,就可以得到具有ggplot所有优点的经验qqPlot。解释非常清楚,代码也非常有效。非常感谢,艾伦!
ggplot(mapping = aes(x = sort(sample1), y = sort(sample2))) + 
  geom_point() +
  geom_abline(aes(slope = 1, intercept = 0), linetype = 2)
gg_qq_empirical <- function(a, b, quantiles = seq(0, 1, 0.01))
{
  a_lab <- deparse(substitute(a))
  if(missing(b)) {
    b <- rnorm(length(a), mean(a), sd(a))
    b_lab <- "normal distribution"
  }
  else b_lab <- deparse(substitute(b))
  
  ggplot(mapping = aes(x = quantile(sample1, quantiles), 
                       y = quantile(sample2, quantiles))) + 
    geom_point() +
    geom_abline(aes(slope = 1, intercept = 0), linetype = 2) +
    labs(x = paste(deparse(substitute(a)), "quantiles"), 
         y = paste(deparse(substitute(b)), "quantiles"),
         title = paste("Empirical qq plot of", a_lab, "against", b_lab))
}
qq <- gg_qq_empirical(sample1, sample2)
qq + theme_light() + coord_equal()
d <- tibble(Group=rep(1:2, each=200), Sample=c(rnorm(200), rnorm(200, mean=2, sd=4)))
d %>% ggplot(aes(sample=Sample)) + stat_qq() + facet_wrap(~Group)
qplot(sample=Sample, data=d, color=as.factor(Group))