How can I plot a ROC curve using ggplot2? Can you provide some examples?

To plot a Receiver Operating Characteristic (ROC) curve using ggplot2, first import the necessary packages and data. Then, use the “geom_roc” function from the “ggplot2” package to create a basic ROC curve. Additional customization can be done using other ggplot2 functions, such as “labs” and “theme”. Some examples of ggplot2 code for plotting ROC curves can be found online or in the ggplot2 documentation. These examples can serve as a helpful guide for creating a customized and visually appealing ROC curve.

Plot a ROC Curve Using ggplot2 (With Examples)


Logistic Regression is a statistical method that we use to fit a regression model when the response variable is binary. To assess how well a logistic regression model fits a dataset, we can look at the following two metrics:

  • Sensitivity: The probability that the model predicts a positive outcome for an observation when indeed the outcome is positive.
  • Specificity: The probability that the model predicts a negative outcome for an observation when indeed the outcome is negative.

One easy way to visualize these two metrics is by creating a ROC curve, which is a plot that displays the sensitivity and specificity of a logistic regression model.

This tutorial explains how to create and interpret a ROC curve in R using the ggplot2 visualization package.

Example: ROC Curve Using ggplot2

Suppose we fit the following logistic regression model in R:

#load Default dataset from ISLR book
data <- ISLR::Default

#divide dataset into training and test set
set.seed(1)
sample <- sample(c(TRUE, FALSE), nrow(data), replace=TRUE, prob=c(0.7,0.3))
train <- data[sample, ]
test <- data[!sample, ]

#fit logistic regression model to training set
model <- glm(default~student+balance+income, family="binomial", data=train)

#use model to make predictions on test set
predicted <- predict(model, test, type="response")

To visualize how well the logistic regression model performs on the test set, we can create a ROC plot using the ggroc() function from the pROC package:

#load necessary packageslibrary(ggplot2)
library(pROC)

#define object to plot
rocobj <- roc(test$default, predicted)

#create ROC plot
ggroc(rocobj)

ROC curve in ggplot2

The y-axis displays the sensitivity (the true positive rate) of the model and the x-axis displays the specificity (the true negative rate) of the model.

Note that we can add some styling to the plot and also provide a title that contains the AUC (area under the curve) for the plot:

#load necessary packageslibrary(ggplot2)
library(pROC)

#define object to plot and calculate AUC
rocobj <- roc(test$default, predicted)
auc <- round(auc(test$default, predicted),4)

#create ROC plot
ggroc(rocobj, colour = 'steelblue', size = 2) +
  ggtitle(paste0('ROC Curve ', '(AUC = ', auc, ')'))

ROC curve with AUC in ggplot2

Note that we can also modify the theme of the plot:

#create ROC plot with minimal theme
ggroc(rocobj, colour = 'steelblue', size = 2) +
  ggtitle(paste0('ROC Curve ', '(AUC = ', auc, ')')) +
  theme_minimal()

ROC curve in R using ggplot2

x