我想创建一个包含两个面板的图,每个面板包含两个ROC曲线。为了介绍我的(失败)方法,我生成包含真实标签的数据框,四种方法的标签(每种方法对应)
N <- 20
TF <- rep(c(0,1),each=N/2)
pred <- method <- true <- NULL
for (imethod in 1 : 4){
pred <- c(pred,seq(-1,1,length.out=N) + rnorm(N) )
method <- c(method,rep(imethod,N))
true <- c(true,TF)
}
dat.roc <-
data.frame(true=true,pred=pred,method=method,panel=rep(1:2,each=length(method)/2))
xyplot(true ~ pred|panel, data=dat.roc,groups=method,
xlim=c(0,1),xlab="1-specificity",
ylab="sensitivity",
panel=function(x,y,...){
DD <- table(-x,y)
sens <- cumsum(DD[,2])/sum(DD[,2])
mspec <- cumsum(DD[,1])/sum(DD[,1])
panel.xyplot(mspec,sens,type="l",...)
panel.abline(0,1)
})
该图有两个面板,每个面板只有一条ROC曲线(有两种颜色)!如何在每个面板中正确指定晶格返回两条ROC曲线?
答案 0 :(得分:2)
由于您在面板功能中使用cumsum
,因此您需要确保为每个组创建不同的图,而不仅仅是每个面板。一种方法是使用panel.superpose
面板功能,因此您可以将代码更改为
xyplot(true ~ pred|panel, data=dat.roc,groups=method,
xlim=c(0,1),xlab="1-specificity",
ylab="sensitivity",
panel=panel.superpose,
panel.groups=function(x,y,type, ...){
DD <- table(-x,y)
sens <- cumsum(DD[,2])/sum(DD[,2])
mspec <- cumsum(DD[,1])/sum(DD[,1])
panel.xyplot(mspec,sens,type="l",...)
panel.abline(0,1)
})
产生情节