QQ情节用ggplot2 :: stat_qq,颜色,单组

Ben*_*ker 6 plot r ggplot2

我正在寻找一种更方便的方法来获取QQ图,ggplot2其中分位数是为整个数据集计算的.但我可以为数据中的组使用映射(颜色/形状).

library(dplyr)
library(ggplot2)
library(broom) ## for augment()
Run Code Online (Sandbox Code Playgroud)

补充一些数据:

set.seed(1001)
N <- 1000
G <- 10
dd <- data_frame(x=runif(N),
             f=factor(sample(1:G,size=N,replace=TRUE)),
             y=rnorm(N)+2*x+as.numeric(f))
m1 <- lm(y~x,data=dd)
dda <- cbind(augment(m1),f=dd$f)
Run Code Online (Sandbox Code Playgroud)

基本情节:

ggplot(dda)+stat_qq(aes(sample=.resid))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果我尝试添加颜色,则分组进行分位数计算(我不想要):

ggplot(dda)+stat_qq(aes(sample=y,colour=f))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果我使用stat_qq(aes(sample=y,colour=f,group=1))ggplot忽略颜色规范,我会得到第一个回调.

我想要一个绘图,其中点的位置与第一种情况相同,但颜色与第二种情况相同.我有一个qqnorm基于手册的解决方案,我可以发布,但我正在寻找更好的东西......

eip*_*i10 5

您可以自己计算分位数,然后使用geom_point以下方法绘制:

dda = cbind(dda, setNames(qqnorm(dda$.resid, plot.it=FALSE), c("Theoretical", "Sample")))

ggplot(dda) + 
  geom_point(aes(x=Theoretical, y=Sample, colour=f))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

啊,我想我应该读到你的问题的结尾。这是您所指的手动解决方案,对吗?虽然你可以把它打包成一个函数:

my_stat_qq = function(data, colour.var) {

  data=cbind(data, setNames(qqnorm(data$.resid, plot.it=FALSE), c("Theoretical", "Sample")))

  ggplot(data) + 
    geom_point(aes_string(x="Theoretical", y="Sample", colour=colour.var))

}

my_stat_qq(dda, "f")
Run Code Online (Sandbox Code Playgroud)