R图中的白色边距使用plot.roc()函数

时间:2016-08-02 15:33:17

标签: r plot proc-r-package

我试图在网站上创建一个类似的图。但是,我遇到了一个更基本的问题:我的R图中有一些空白区域,我想摆脱它。这是使用包pROC。我已经包含了一个可重现的例子,说明了这个问题:

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

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

plot.roc() issue: reproducible example #1 output

如您所见,图像在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() issue: reproducible example #2 output

There is no white space in the original picture that used the exact same code

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

1 个答案:

答案 0 :(得分:0)

答案已在对该问题的评论中给出,但我认为值得在正确的答案中写下来。还应该注意,你和链接的例子都没有指定用于保存图的图形设备的任何内容,所以说你“使用完全相同的代码”有点误导。

通常ROC曲线应该在单位平方内绘制,因此灵敏度和特异性占用相同的空间,使得可视化和比较更容易(通常ROC曲线用于显示特异性和灵敏度之间的权衡,并给出其中一个更多的空间会使这种比较更加困难。)

pROC包通过在plot.window的内部调用中设置asp=1来实现这一点。您有两种选择:

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

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

    ROC curves with asp = NA

  2. 在调用s之前将the graphical parameter pty更改为plot.roc,以便边距位于图表之外:

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

    ROC curves with par(pty = "s")