2017-04-04 114 views
2

我想根據與它們關聯的某個變量爲geom_qq(別名stat_qq)分位數 - 分位數圖繪製點。geom_qq圖中的着色點

將被着色的mtcars$mpg分位數,位數圖的基礎上,mtcars$disp的價值觀,我試圖以各種方式點的例子:

library(ggplot2) 
pA = ggplot(mtcars) + geom_qq(aes(sample = mpg)) 
pB = ggplot(mtcars) + geom_qq(aes(sample = mpg, color=disp)) 
pC = ggplot(mtcars) + geom_qq(aes(sample = mpg, fill=disp), shape=21) 
pD = ggplot(mtcars) + geom_qq(aes(sample = mpg, color=as.factor(disp))) 

library(cowplot) 
plot_grid(pA,pB,pC,pD,labels=LETTERS[1:4]) 

Failure to color stat_qq points

不幸的是,該點只有在mtcars$disp被視爲分類變量(D)時纔會出現顏色,在這種情況下,數據會生成幾個系列的點,分別計算理論分位數(例如他們的模式改變)。

我想mtcars $ DISP被視爲一個連續變量,決定每一點的顏色,這一點我可以手動執行:

manual_colors = colorRampPalette(c("blue","red"))(100)[as.numeric(cut(mtcars$disp,breaks=100))] 
ggplot(mtcars) + geom_qq(aes(sample = mpg), color=manual_colors) 

Desired result

什麼會正確GGPLOT2語法取得這個結果?

回答

1

geom_qq似乎不能允許這樣做。從理論上講,如果你可以從

data.frame(sample, theoretical) 

改變this line

data.frame(sample, theoretical, data) 

它可能會工作,但它並不明顯,我嘗試了最簡單的方法。

相反,我建議你自己計算一下數值。這很簡單。你可以使用這樣的函數

make_qq <- function(dd, x) { 
    dd<-dd[order(dd[[x]]), ] 
    dd$qq <- qnorm(ppoints(nrow(dd))) 
    dd 
} 

然後你就可以做出這樣的

ggplot(make_qq(mtcars, "mpg")) + 
    geom_point(aes(x=qq, y=mpg, color=hp)) + 
    labs(x="Theoretical",y="Observed") 

enter image description here

情節