Data

# read data
df <- read.csv('Likert-data1.csv', stringsAsFactors = T)
summary(df)
##              X           Q1          Q2          Q3          Q4          Q5    
##  Respondent 1 : 1   Never : 6   Never :24   Never :23   Never : 7   Never :12  
##  Respondent 10: 1   Rarely:28   Rarely:10   Open  : 1   Open  : 8   Open  :10  
##  Respondent 11: 1                           Rarely:10   Rarely:19   Rarely:12  
##  Respondent 12: 1                                                              
##  Respondent 13: 1                                                              
##  Respondent 14: 1                                                              
##  (Other)      :28                                                              
##                  Q6    
##  Almost every time:17  
##  Open             :17  
##                        
##                        
##                        
##                        
## 
library(dplyr)
levs <- c("Never", "Rarely", "Open", "Almost every time")
df1 <- df %>%
  mutate(across(Q1:Q6, ~ factor(.x, levels = levs)))
summary(df1)
##              X                      Q1                     Q2    
##  Respondent 1 : 1   Never            : 6   Never            :24  
##  Respondent 10: 1   Rarely           :28   Rarely           :10  
##  Respondent 11: 1   Open             : 0   Open             : 0  
##  Respondent 12: 1   Almost every time: 0   Almost every time: 0  
##  Respondent 13: 1                                                
##  Respondent 14: 1                                                
##  (Other)      :28                                                
##                  Q3                     Q4                     Q5    
##  Never            :23   Never            : 7   Never            :12  
##  Rarely           :10   Rarely           :19   Rarely           :12  
##  Open             : 1   Open             : 8   Open             :10  
##  Almost every time: 0   Almost every time: 0   Almost every time: 0  
##                                                                      
##                                                                      
##                                                                      
##                  Q6    
##  Never            : 0  
##  Rarely           : 0  
##  Open             :17  
##  Almost every time:17  
##                        
##                        
## 

Plotting using sjPlot

library(sjmisc)   # for find_var() function 
library(sjPlot)   # for plot_likert() function


mydf <- find_var(df1, pattern = "Q", out = "df")
plot_likert(mydf, title = "Likert Scale Visualization", reverse.scale = T, 
            catcount = 4, show.n = T, values = "hide") +
  legend_style(pos = "bottom", base.theme = theme_sjplot2())

Plotting using ggplot2

Data wrangling:

library(dplyr)    # for data wrangling
library(tidyr)    # for pivot_longer() function

df2 <- df1 %>% 
  pivot_longer(cols = Q1:Q6, names_to = "Questions", values_to = "Response") %>% 
  group_by(Questions, Response) %>% 
  count()

print(df2)
## # A tibble: 15 × 3
## # Groups:   Questions, Response [15]
##    Questions Response              n
##    <chr>     <fct>             <int>
##  1 Q1        Never                 6
##  2 Q1        Rarely               28
##  3 Q2        Never                24
##  4 Q2        Rarely               10
##  5 Q3        Never                23
##  6 Q3        Rarely               10
##  7 Q3        Open                  1
##  8 Q4        Never                 7
##  9 Q4        Rarely               19
## 10 Q4        Open                  8
## 11 Q5        Never                12
## 12 Q5        Rarely               12
## 13 Q5        Open                 10
## 14 Q6        Open                 17
## 15 Q6        Almost every time    17

Visualization:

library(ggplot2)

df2 %>% 
  ggplot(aes(y = Questions, x = n, fill = Response)) + 
  geom_col(position = "stack", alpha = 0.9) + 
  geom_text(aes(label = n), size = 4, color = "white", position = position_stack(vjust = 0.5)) +
  theme_bw() +
  theme(legend.position="bottom", plot.title = element_text(hjust = 0.5)) +
  guides(fill = guide_legend(reverse=TRUE)) +
  scale_fill_brewer(palette = "Dark2") +
  labs(title = "Likert Scale Visualization", x = "Freq.", y = "Questions")

LS0tDQp0aXRsZTogIkxpa2VydCBTY2FsZSBWaXN1YWxpemF0aW9uIg0KYXV0aG9yOiAiTWQgQWhzYW51bCBJc2xhbSINCmRhdGU6ICIzMC1KdW5lLTIwMjMiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNA0KICAgIHRoZW1lOiBjZXJ1bGVhbg0KICAgIGhpZ2hsaWdodDogaGFkZG9jaw0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgY29tbWVudCA9ICIjIyIsIHByb21wdCA9IEYsIG1lc3NhZ2UgPSBGLCB3YXJuaW5nID0gRg0KKQ0KYGBgDQoNCiMjIERhdGENCg0KYGBge3J9DQojIHJlYWQgZGF0YQ0KZGYgPC0gcmVhZC5jc3YoJ0xpa2VydC1kYXRhMS5jc3YnLCBzdHJpbmdzQXNGYWN0b3JzID0gVCkNCnN1bW1hcnkoZGYpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGV2cyA8LSBjKCJOZXZlciIsICJSYXJlbHkiLCAiT3BlbiIsICJBbG1vc3QgZXZlcnkgdGltZSIpDQpkZjEgPC0gZGYgJT4lDQogIG11dGF0ZShhY3Jvc3MoUTE6UTYsIH4gZmFjdG9yKC54LCBsZXZlbHMgPSBsZXZzKSkpDQpzdW1tYXJ5KGRmMSkNCmBgYA0KDQojIyBQbG90dGluZyB1c2luZyBzalBsb3QNCg0KYGBge3J9DQpsaWJyYXJ5KHNqbWlzYykgICAjIGZvciBmaW5kX3ZhcigpIGZ1bmN0aW9uIA0KbGlicmFyeShzalBsb3QpICAgIyBmb3IgcGxvdF9saWtlcnQoKSBmdW5jdGlvbg0KDQoNCm15ZGYgPC0gZmluZF92YXIoZGYxLCBwYXR0ZXJuID0gIlEiLCBvdXQgPSAiZGYiKQ0KcGxvdF9saWtlcnQobXlkZiwgdGl0bGUgPSAiTGlrZXJ0IFNjYWxlIFZpc3VhbGl6YXRpb24iLCByZXZlcnNlLnNjYWxlID0gVCwgDQogICAgICAgICAgICBjYXRjb3VudCA9IDQsIHNob3cubiA9IFQsIHZhbHVlcyA9ICJoaWRlIikgKw0KICBsZWdlbmRfc3R5bGUocG9zID0gImJvdHRvbSIsIGJhc2UudGhlbWUgPSB0aGVtZV9zanBsb3QyKCkpDQpgYGANCg0KIyMgUGxvdHRpbmcgdXNpbmcgZ2dwbG90Mg0KDQpEYXRhIHdyYW5nbGluZzoNCmBgYHtyfQ0KbGlicmFyeShkcGx5cikgICAgIyBmb3IgZGF0YSB3cmFuZ2xpbmcNCmxpYnJhcnkodGlkeXIpICAgICMgZm9yIHBpdm90X2xvbmdlcigpIGZ1bmN0aW9uDQoNCmRmMiA8LSBkZjEgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IFExOlE2LCBuYW1lc190byA9ICJRdWVzdGlvbnMiLCB2YWx1ZXNfdG8gPSAiUmVzcG9uc2UiKSAlPiUgDQogIGdyb3VwX2J5KFF1ZXN0aW9ucywgUmVzcG9uc2UpICU+JSANCiAgY291bnQoKQ0KDQpwcmludChkZjIpDQpgYGANCg0KVmlzdWFsaXphdGlvbjoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpkZjIgJT4lIA0KICBnZ3Bsb3QoYWVzKHkgPSBRdWVzdGlvbnMsIHggPSBuLCBmaWxsID0gUmVzcG9uc2UpKSArIA0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJzdGFjayIsIGFscGhhID0gMC45KSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbiksIHNpemUgPSA0LCBjb2xvciA9ICJ3aGl0ZSIsIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpKSArDQogIHRoZW1lX2J3KCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIsIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArDQogIGd1aWRlcyhmaWxsID0gZ3VpZGVfbGVnZW5kKHJldmVyc2U9VFJVRSkpICsNCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsNCiAgbGFicyh0aXRsZSA9ICJMaWtlcnQgU2NhbGUgVmlzdWFsaXphdGlvbiIsIHggPSAiRnJlcS4iLCB5ID0gIlF1ZXN0aW9ucyIpDQpgYGANCg0K