2016-08-02 10 views
1

Я пытался создать фигуру, похожую на одну на веб-сайте. Однако я столкнулся с более фундаментальной проблемой: в моем R-графике есть какое-то пустое пространство, от которого я бы хотел избавиться. Используется пакет pROC. Я включил воспроизводимый пример, иллюстрирующий проблему:Белые поля в пределах участка R с использованием функции plot.roc()

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

Причина в том, 'жерех = 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. Set asp=NA (или подобные) и «свободный» ось (обратите внимание, что ваша кривая ROC не будет единичный квадрат, но в единичном прямоугольнике, что делает его потенциально более сложно интерпретировать):

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

    ROC curves with asp = NA

  2. Изменение the graphical parameter pty к s перед вызовом plot.roc так, что поля находятся за пределами участка:

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

    ROC curves with par(pty = "s")

 Смежные вопросы

  • Нет связанных вопросов^_^