Ich versuche, mehrere ROC-Kurven auf einem einzigen Diagramm mit ggplot2 plotten. Hier ist, wie weit ich habe:Plot mehrere ROC-Kurven mit ggplot2 in verschiedenen Schichten
ggroc2 <- function(columns, data = mtcars, classification = "am",
interval = 0.2, breaks = seq(0, 1, interval)){
require(pROC)
require(ggplot2)
#The frame for the plot
g <- ggplot() + geom_segment(aes(x = 0, y = 1, xend = 1,yend = 0)) +
scale_x_reverse(name = "Specificity",limits = c(1,0), breaks = breaks,
expand = c(0.001,0.001)) +
scale_y_continuous(name = "Sensitivity", limits = c(0,1), breaks =
breaks, expand = c(0.001, 0.001)) +
theme_classic() + coord_equal()
#The loop to calculate ROC's and add them as new layers
for(i in 1:length(columns)){
croc <- roc(data[,classification], data[,columns[i]])
plotx <- rev(croc$specificities)
ploty <- rev(croc$sensitivities)
g <- g + geom_step(aes(x=plotx, y=ploty))
}
g
}
#Sample graph
ggroc2(c("mpg", "disp", "drat", "wt"))
Das Problem ist, dass nur der letzte Parameter in der columns
Liste aufgetragen wird. Ich habe festgestellt, dass das Problem mit aes()
und faule Bewertung nach dem Lesen the answer to this question in Verbindung stehen muss. Dieses Beispiel verwendet geom_segment()
, und das Problem wird nach dem Entfernen von aes()
insgesamt gelöst. Es funktioniert nicht für mich, weil ich irgendwie die Daten abbilden muss. Wenn ich hier aes()
entferne, wird nichts geplottet. Wie arbeite ich das Problem der faulen Bewertung in geom_
, die von aes()
abhängen?
[Diese Antwort] (https://stackoverflow.com/a/15988472/2461552) zeigt die Variablennamen und 'aes_string' als Behelfslösung. – aosmith
In Bezug auf das doppelte Problem, danke für das Aufzeigen. Ich versuche zu entscheiden, ob ich auf das "Das löste mein Problem!" Klicken sollte. Taste oder "Ich werde bearbeiten, um zu erklären, wie". Meine Frage scheint wirklich ein Duplikat zu sein, aber ich finde die Antwort unten eine viel elegantere und effizientere Lösung, als meine Daten in ein langes Format umzuwandeln. Was soll ich machen? – naco
Einer der Gründe, warum ich das als Duplikat gegen andere Duplikate gewählt habe, ist, dass es den 'data.frame' Workaround zeigt. Die gegebene Antwort verwendet denselben Ansatz. – aosmith