2017-04-04 103 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

情节