我正在尝试使用下面的代码在一个图上绘制许多ROC图。 x
是一个向量列表(每个包含x坐标),y
是一个列表向量(每个包含y坐标)。
plotROC<- function(x, y, label=NA) {
p <- ggplot() + ggtitle("ROC Plot") + xlab("False Positive Rate") +
ylab("True Positive Rate") + xlim(c(0,1)) + ylim(c(0, 1)) +
geom_segment(aes(x=0, y=0, xend=1, yend=1), colour="black")
for (i in 1:length(x)) {
auc <- AUC(x[[i]], y[[i]])
lab <- ifelse(is.na(label[i]), "", paste(label[i], "\n", sep=""))
p <- p + geom_line(
aes(x[[i]], y[[i]], colour=paste(lab, "AUC: ",
formatC(auc, format="f",
digits=2), sep="")))
}
p + scale_color_brewer(palette=palette) +
theme(legend.title=element_blank())
}
由于某种原因,该功能仅绘制最终的ROC图。如果有人可以提供帮助,我会非常感激!
谢谢,
杰克
答案 0 :(得分:1)
您应该使用data.frame
与ggplot2
合作,这对您来说会更容易。
例如,您可以轻松地将数据转换为data.frame:
x = list(runif(4), runif(4))
y = list(runif(4), runif(4))
df = Reduce(rbind, mapply(function(x, y, z) {
data.frame(x=x, y=y, z=z)
}, x, y, 1:length(x), SIMPLIFY = FALSE))
df$z = as.factor(df$z)
请注意,我添加了一个z
变量,可以对应您想要的任何内容。我把它转换成因子,以便ggplot将其视为因子而不是连续的。
然后你的情节可以像这样定义:
ggplot(df, aes(x=x, y=y, color=z)) +
geom_line() +
ggtitle("ROC Plot") +
xlab("False Positive Rate") +
ylab("True Positive Rate") +
xlim(c(0,1)) + ylim(c(0, 1)) +
geom_segment(aes(x=0, y=0, xend=1, yend=1), colour="black")
使用for循环(这不是一个留在for循环中的好主意),这段代码对我有用:
library(ggplot2)
plotROC<- function(x, y, label=NA) {
p <- ggplot() +
ggtitle("ROC Plot") +
xlab("False Positive Rate") +
ylab("True Positive Rate") +
xlim(c(0,1)) + ylim(c(0, 1)) +
geom_segment(aes(x=0, y=0, xend=1, yend=1), colour="black")
for (i in 1:length(x)) {
p <- p + geom_line(
aes(x[[i]], y[[i]]))
}
return(
p +
scale_color_brewer(palette="YlOrRd") +
theme(legend.title=element_blank())
)
}
x = list(runif(4), runif(4))
y = list(runif(4), runif(4))
plotROC(x, y)