4

我想用 pRoC 绘制 ROC 曲线。但是由于某种原因,x 轴的任一侧都有额外的空白空间,我无法使用 xlim 将其删除。一些示例代码:

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)

在此处输入图像描述

我尝试了 pROC 帮助文件,但这并没有真正帮助我。更让我不解的是,Y轴看起来还不错……

我真的很感谢你的帮助!

4

3 回答 3

3

确保绘图设备是方形的并调整边距,以便顶部 + 底部 == 左 + 右:

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

在此处输入图像描述

于 2017-02-06T07:19:23.003 回答
2

如果您不介意轴扭曲,另一个答案是使用该asp参数。默认情况下,它设置为 1,确保两个轴具有相同的比例并且 ROC 曲线是平方*,但您可以使用以下命令将其关闭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)

在此处输入图像描述

* 如果您想直观地解释它,那么拥有平方 ROC 曲线很重要。例如,您可能希望通过它们与对角线的距离来比较几个局部最大值:只有当两个轴具有相同的比例时,您才能这样做。因此,如果您想这样做,请确保遵循我的其他答案。

于 2017-02-06T07:23:22.803 回答
2

还有第三个答案,它将边距从绘图区域中取出,因此即使设备不存在,它也会自动看起来是方形的。这是通过将图形参数 pty设置为"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)

在此处输入图像描述
(我添加了一个黑框来可视化发生了什么)

于 2018-03-19T20:33:30.263 回答