Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How can I change size of y-axis text labels on a likert() object in R?

I’m working with the likert() library to generate nice looking diverging stacked bar charts in R. Most of the formatting has come together, but I can’t seem to find a way to shrink the text for the y-axis labels (e.g. "You and your family in the UK", "People in your local area…" etc.) which are too large for the plot. Any ideas here? I’m starting to wonder if I need to revert to ggplot, which will require more code, but have more customisability…

# Ingest data to make reproducible example:

climate_experience_data <- structure(list(Q25_self_and_family = c(4, 2, 3, 5, 3, 3, 4, 2, 
4, 2, 4, 4, 3, 3, 2, 5, 3, 4, 1, 3, 3, 2, 4, 2, 2, 2, 4, 3, 3, 
3, 2, 5, 5, 4, 2, 2, 2, 3, 1, 3, 2, 1, 2, 4, 2), Q25_local_area = c(3, 
3, 3, 5, 3, 2, 4, 2, 4, 2, 4, 3, 2, 3, 2, 5, 4, 5, 1, 4, 3, 3, 
4, 2, 3, 2, 3, 3, 2, 3, 2, 5, 5, 2, 2, 2, 2, 3, 1, 1, 2, 1, 2, 
4, 3), Q25_uk = c(4, 3, 3, 5, 2, 3, 5, 2, 4, 2, 4, 3, 3, 3, 3, 
5, 4, 5, 2, 3, 3, 2, 4, 2, 4, 3, 4, 3, 2, 4, 4, 5, 5, 4, 3, 3, 
2, 4, 2, 5, 2, 2, 2, 3, 3), Q25_outside_uk = c(4, 4, 3, 5, 4, 
4, 5, 2, 4, 3, 3, 3, 3, 4, 3, 5, 4, 5, 4, 3, 3, 2, 4, 2, 5, 3, 
3, 2, 2, 3, 4, 4, 5, 4, 4, 3, 2, 4, 4, 5, 2, 3, 2, 2, 2)), row.names = c(NA, 
-45L), class = c("tbl_df", "tbl", "data.frame"))

# load libraries:

require(tidyverse)
require(likert)

# Q25 - generate diverging stacked bar chart using likert()
q25_data <- select(climate_experience_data, Q25_self_and_family:Q25_outside_uk)
names(q25_data) <- c("You and your family in the UK", "People in your local area or city", "The UK as a whole", "Your family and/or friends living outside the UK")
# Set up levels text for question responses
q25_levels <- paste(c("not at all", "somewhat", "moderately", "very", "extremely"),  
                    "serious")
q25_likert_table <- q25_data %>% 
  mutate(across(everything(), 
                factor, ordered = TRUE, levels = 1:5, labels=q25_levels)) %>% 
  as.data.frame %>%

# make plot:

plot(q25_likert_table, wrap=20, text.size=3, ordered=FALSE, low.color='#B18839', high.color='#590048') + 
  ggtitle(title) +
  labs(title = "How serious a threat do you think \nclimate change poses to the following?", y="") + 
  guides(fill = guide_legend(title = NULL)) + 
  theme_ipsum_rc() +
  theme()

Here’s a sample of output:

enter image description here

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

As your plot is still a ggplot object you could adjust the size of the y axis labels via theme(axis.text.y = ...):

library(tidyverse)
library(likert)
library(hrbrthemes)

q25_likert_table <- q25_data %>%
  mutate(across(everything(),
    factor,
    ordered = TRUE, levels = 1:5, labels = q25_levels
  )) %>%
  as.data.frame() %>% 
  likert()

plot(q25_likert_table, wrap = 20, text.size = 3, ordered = FALSE, low.color = "#B18839", high.color = "#590048") +
  ggtitle(title) +
  labs(title = "How serious a threat do you think \nclimate change poses to the following?", y = "") +
  guides(fill = guide_legend(title = NULL)) +
  theme_ipsum_rc() +
  theme(axis.text.y = element_text(size = 4))

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading