Если вы просто хотите создать график (без этого глупого интерполяционного сплайна между точками), просто нанесите данные, которые вы даете, стандартным способом, добавив точку в (0,0) и добавив ее в (1,1), чтобы дать конечные точки кривой.
## your data with different labels
dat <- data.frame(cutpoint = c(5, 7, 9),
TPR = c(0.56, 0.78, 0.91),
FPR = c(0.01, 0.19, 0.58))
## plot version 1
op <- par(xaxs = "i", yaxs = "i")
plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)
par(op)
Объяснение кода: первый вызов plot()
устанавливает область построения, вообще не рисуя. Обратите внимание, что я заставляю график покрывать диапазон (0,1) по обеим осям. Вызов par()
сообщает R построить оси, которые охватывают диапазон данных — по умолчанию они расширяются на 4 процента диапазона по каждой оси.
Следующая строка, with(dat, lines(....))
, рисует кривую ROC, и здесь мы добавляем и добавляем точки в (0,0) и (1,1), чтобы получить полную кривую. Здесь я использую type = "o"
, чтобы начертить как точки, так и линии, точки представлены символом 25, что позволяет залить их цветом, здесь черным.
Затем я добавляю метки к точкам, используя text(....)
; аргумент pos
используется для размещения метки вдали от фактических координат построения. Я беру метки из объекта cutpoint
во фрейме данных.
Вызов abline()
рисует линию 1:1 (здесь 0
и 1
означают пересечение 0
и наклон 1
соответственно.
Последняя строка сбрасывает параметры графика до значений по умолчанию, которые мы сохранили в op
перед построением графика (в первой строке).
Результирующий график выглядит следующим образом:
![введите здесь описание изображения](https://i.stack.imgur.com/PutTe.png)
Это не точное факсимиле, и я предпочитаю график, использующий значения по умолчанию для диапазонов осей (добавляя 4 процента):
plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)
![введите здесь описание изображения](https://i.stack.imgur.com/WqtV1.png)
Опять же, не совсем факсимиле, но близко.
person
Gavin Simpson
schedule
16.02.2012