2016-08-02 257 views
1

我試圖在網站上創建一個與圖像類似的圖。但是,我遇到了一個更基本的問題:R圖中有一些我想擺脫的空白空間。這是使用包pROC。我已經提供了說明這一問題的可重複的例子:使用plot.roc()函數的R圖中的白色邊距

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設置可能有問題。有人能夠協助嗎?

+0

下面是在第一段中描述的圖像的鏈接:http://web.expasy.org/pROC/images/comparison.png – user6668342

+0

原因是'ASP = 1'(plot.roc.roc *方法的默認值)。它通過'plot.roc(...,asp = F)'來解決。錯誤發生在你的代碼中,最好使用'plot.roc(...,add = T)'而不是'lines.roc(...)'。 – cuttlefish44

+0

工作,謝謝! – user6668342

回答

0

答案已經在問題的評論中給出,但我認爲這是值得寫在正確的答案。還應該注意的是,你和鏈接的例子都省略了,指定用於保存圖的圖形設備的任何內容,所以說你「使用完全相同的代碼」有點誤導。

典型的ROC曲線應繪製在單位平方內,以便靈敏​​度和特異性佔據相同的空間,使可視化和比較更容易(通常ROC曲線用於顯示特異性和靈敏度之間的折衷,他們更多的空間會使這種比較更加困難)。

pROC軟件包通過asp=1的內部呼叫設置爲plot.window來完成此操作。您有兩個選項以繼續:

  1. 設置asp=NA(或類似)和「自由」的軸(請注意,您的ROC曲線將不會是一個單位正方形,但在單元矩形,使得它可能更困難解讀):

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

    ROC curves with asp = NA

  2. 更改the graphical parameter ptys調用plot.roc從而使利潤率的情節之外之前:

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

    ROC curves with par(pty = "s")