2017-03-08 164 views
5

我正在尋找一個更方便的方式來獲得Q-Q圖在ggplot2其中作爲一個整體的數據集計算分位數。但是我可以爲數據中的組使用映射(顏色/形狀)。Q-Q圖與ggplot2 :: stat_qq,顏色,單組

library(dplyr) 
library(ggplot2) 
library(broom) ## for augment() 

做了一些數據:

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) 

基本情節:

ggplot(dda)+stat_qq(aes(sample=.resid)) 

enter image description here

,如果我嘗試添加顏色,團體走散的位數計算(我不想要):

ggplot(dda)+stat_qq(aes(sample=y,colour=f)) 

enter image description here

如果我使用stat_qq(aes(sample=y,colour=f,group=1)) ggplot忽略色彩規範和我得到的第一個情節回來。

我想要一個點位於第一種情況下的圖,但像第二種情況那樣着色。我有一個qqnorm基於手動解決方案,我可以張貼,但我要找的東西更好...

回答

2

你可以自己計算的位數,然後繪製使用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)) 

enter image description here

啊,我想我應該讀到你的問題的結尾。這是你所指的手動解決方案,對吧?雖然你可以將它作爲一個函數來打包:

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") 
+0

是的,這就是我所指的手動解決方案(你的比我的稍好)。 –