1

我试图创建一个类似于网站上的图形。但是,我遇到了一个更基本的问题:我的 R 图中有一些我想去掉的空白。这是使用包pROC。我提供了一个可重现的示例来说明该问题:

library("pROC")
plot.roc(c(1, 1, 0, 0, 1), c(3, 4, 5, 6, 7), legacy.axes=TRUE)

上面的代码最终看起来像下图:

plot.roc() 问题:可重现的示例 #1 输出

如您所见,图像在 y 轴和图的最左侧部分之间有很多空白区域,图的右侧也是如此。该问题仅在使用时出现plot.roc()。我什至尝试制作我试图模拟的情节(使用网站上提供的代码),但最终还是得到了不同的图像(第一段中描述的图像的代码包含在下面):

library(pROC)
data(aSAH)

rocobj1 <- plot.roc(aSAH$outcome, aSAH$s100, main="Statistical comparison", percent=TRUE, col="#1c61b6")
rocobj2 <- lines.roc(aSAH$outcome, aSAH$ndka, percent=TRUE, col="#008600")
testobj <- roc.test(rocobj1, rocobj2)

text(50, 50, labels=paste("p-value =", format.pval(testobj$p.value)), adj=c(0, .5))

legend("bottomright", legend=c("S100B", "NDKA"), col=c("#1c61b6", "#008600"), lwd=2)

plot.roc() 问题:可重现的示例 #2 输出

使用完全相同的代码的原始图片中没有空白

我的 R 设置可能有问题,尽管在第二台计算机上运行代码时问题仍然存在。有人可以提供帮助吗?

4

1 回答 1

1

答案已在对该问题的评论中给出,但我认为值得将其写在正确的答案中。还应该注意的是,您和链接的示例都省略了指定用于保存绘图的图形设备的任何内容,因此说您“使用完全相同的代码”有点误导。

通常 ROC 曲线应绘制在单位平方内,以便灵敏​​度和特异性占据相同的空间,使可视化和比较更容易(通常 ROC 曲线用于显示特异性和灵敏度之间的权衡,并为其中之一提供更多空间将使这种比较更加困难)。

pROC 包通过将asp=1内部调用设置为plot.window. 您有两个选项可以继续:

  1. 设置asp=NA(或类似的)并“释放”轴(请注意,您的 ROC 曲线将不是单位正方形,而是单位矩形,因此可能更难以解释):

    rocobj1 <- plot.roc(aSAH$outcome, aSAH$s100, asp = NA)
    

    asp = NA 的 ROC 曲线

  2. 将图形参数pty更改为s调用之前,plot.roc以便边距位于绘图之外:

    par(pty = "s")
    rocobj1 <- plot.roc(aSAH$outcome, aSAH$s100)
    

    具有 par(pty =

于 2017-04-24T13:27:10.660 回答