pROC ROC curves remove empty space
Asked Answered
T

3

4

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)

enter image description here

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!

Tremml answered 5/2, 2017 at 22:19 Comment(0)
N
4

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)

enter image description here
(I added a black frame to visualize what's going on)

Nocturnal answered 19/3, 2018 at 20:33 Comment(1)
Of all three answers above, this one worked the best for me.Whodunit
N
3

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()

enter image description here

Nocturnal answered 6/2, 2017 at 7:19 Comment(2)
Hi Calimo, thans for your help! This seems to work. However, is there a way to fix this without first writing the plot to a file (aka just inside R)?Tremml
You should be able to do that with your interactive device as well. getOption("device")(width = ..., height = ...)Nocturnal
N
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)

enter image description here

* 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.

Nocturnal answered 6/2, 2017 at 7:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.