Белые поля на графике R с использованием функции plot.roc()
Я пытался создать фигуру, похожую на фигуру на сайте. Однако я столкнулся с более простой проблемой: в моем R-графике есть пробелы, от которых я хотел бы избавиться. Это использует пакет pROC
, Я включил воспроизводимый пример, который иллюстрирует проблему:
library("pROC")
plot.roc(c(1, 1, 0, 0, 1), c(3, 4, 5, 6, 7), legacy.axes=TRUE)
Приведенный выше код в конечном итоге выглядит следующим образом:
Как вы можете видеть, изображение имеет много пустого пространства между осью 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)
На исходном рисунке нет пробелов, в которых использовался точно такой же код.
Возможно, что-то не так с моими настройками R, хотя проблемы сохранялись при запуске кода на втором компьютере. Кто-нибудь может помочь?
1 ответ
Ответ был дан в комментариях к вопросу, но я думаю, что это стоит записать в правильном ответе. Следует также отметить, что и вы, и связанный пример не указали ничего о графическом устройстве, используемом для сохранения графика, поэтому утверждение, что вы "использовали точно такой же код", немного вводит в заблуждение.
Обычно кривые ROC должны быть построены в единичном квадрате, чтобы чувствительность и специфичность занимали одно и то же пространство, облегчая визуализацию и сравнение (обычно кривые ROC служат для отображения компромисса между специфичностью и чувствительностью, и предоставление одной из них большего пространства сделать это сравнение более сложным).
Пакет pROC делает это, устанавливая asp=1
во внутреннем звонке plot.window
, У вас есть два варианта для продолжения:
Задавать
asp=NA
(или аналогичный) и "освободите" ось (обратите внимание, что ваша ROC-кривая будет не единичным квадратом, а прямоугольником, что потенциально затруднит ее интерпретацию):rocobj1 <- plot.roc(aSAH$outcome, aSAH$s100, asp = NA)
Изменение графического параметра
pty
вs
перед звонкомplot.roc
так что поля находятся за пределами участка:par(pty = "s") rocobj1 <- plot.roc(aSAH$outcome, aSAH$s100)