pROC ROC curves remove empty space

2019-01-20 03:20发布

问题:

I want to draw ROC curves with pRoC. However for some reason there is extra empty space on either side of the x-axis and I cannot remove it with xlim. Some example code:

library(pROC)
n = c(4, 3, 5) 
b = c(TRUE, FALSE, TRUE) 
df = data.frame(n, b) 
rocobj <- plot.roc(df$b, df$n, percent = TRUE, main="ROC", col="#1c61b6", add=FALSE)

I tried the pROC help file, but that doesn't really help me. Even more puzzling is to me that the Y-axis is OK looking...

I really appreciate your help!

回答1:

Make sure the plotting device is square and adjust the margins so that top + bottom == left + right:

library(pROC)
png("test.png", width = 480, height = 480)
par(mar = c(4, 4, 4, 4)+.1)
n = c(4, 3, 5) 
b = c(TRUE, FALSE, TRUE)
rocobj <- plot.roc(b, n, percent = TRUE, main="ROC", col="#1c61b6", add=FALSE)
dev.off()



回答2:

An other answer, if you don't mind to have distorted axis, is to use the asp parameter. By default it is set to 1, ensuring both axis have the same scale and the ROC curve is squared*, but you can turn it off with asp = NA:

library(pROC)
par(mar = c(4, 4, 4, 4)+.1)
n = c(4, 3, 5) 
b = c(TRUE, FALSE, TRUE)
rocobj <- plot.roc(b, n, percent = TRUE, main="ROC", col="#1c61b6", add=FALSE, asp = NA)

* Having a squared ROC curve is important if you want to interpret it visually. For instance, you may want to compare several local maximas by their distance to the diagonal: you can only do that if the two axis have the same scale. So if you want to do that make sure to follow my other answer.



回答3:

There is yet a third answer, which takes the margins out of the plotting region, so it will automatically look squared, even when the device isnt. This is done by setting the graphical parameter pty to "s":

library(pROC)
par(pty = "s")
n = c(4, 3, 5) 
b = c(TRUE, FALSE, TRUE)
rocobj <- plot.roc(b, n, percent = TRUE, main="ROC", col="#1c61b6", add=FALSE, asp = NA)


(I added a black frame to visualize what's going on)