Doing Surveys? Try my R Likert Plot Data Hack!

Example of Likert plot of survey opinions using R package

Like many R packages, the Likert package in R is awesome, but it is particular about how you make you Likert plot data before you put it in the plot. I’ve gotten it down to nine steps.

Using Features of Likert Plot Data to Improve Plot Appearance

  • The first six steps are a workaround to get it so that you can use the levels in factor variables in the Likert plot data as labels in the legend without getting any data errors.
  • Steps seven and eight are to make it so the plot prints the full original Likert statements next to the bar by copying them the actual names of dataframe columns.
  • The final step shows how I like to formulate my Likert plot code with options that uses the Likert plot data we created.

Download the data and code from my repository on Github.

survey1 <- read.csv("survey_data.csv", header = TRUE, sep = ",")
StudyID <- c("99991", "99992", "99993", "99994", "99995")
Q1 <- c(1, 2, 3, 4, 5)
Q2 <- c(1, 2, 3, 4, 5)
Q3 <- c(1, 2, 3, 4, 5)
Q4 <- c(1, 2, 3, 4, 5)
Q5 <- c(1, 2, 3, 4, 5)
fake <- data.frame(StudyID, Q1, Q2, Q3, Q4, Q5)
Example Likert plot data frame raw data
survey2 <- rbind(survey1, fake)
survey2$Q1_f <- as.factor(survey2$Q1)
survey2$Q2_f <- as.factor(survey2$Q2)
survey2$Q3_f <- as.factor(survey2$Q3)
survey2$Q4_f <- as.factor(survey2$Q4)
survey2$Q5_f <- as.factor(survey2$Q5)
factor_levels <- c("Strongly Disagree", 
     "Somewhat Disagree", 
     "Neither Agree nor Disagree", 
     "Somewhat Agree", 
     "Strongly Agree")
levels(survey2$Q1_f) <- factor_levels
levels(survey2$Q2_f) <- factor_levels
levels(survey2$Q3_f) <- factor_levels
levels(survey2$Q4_f) <- factor_levels
levels(survey2$Q5_f) <- factor_levels
survey3 <- subset(survey2, StudyID < 99991)
survey4 <- survey3[,7:11]
VarHeadings <- c( "I want to live in a world with unicorns.",
     "Whenever given a choice, I choose chocolate.",
     "My hair is too long.",
     "There really aren't any reasons to do cross-stitch.",
     "Rats are misunderstood.")
names(survey4) <- VarHeadings
p <- likert(survey4)
a <-, legend.position = "right", text.size = 4) +
     theme(text = element_text(size = rel(4)),
     axis.text.y = element_text(size = rel(2))) +
     theme_update(legend.text = element_text(size = rel(0.7))) +

Want to learn how to create documentation for surveys? Take my data curation course on LinkedIn Learning!

Updated October 10, 2020

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.