character_names <- c(
"Luke Skywalker",
"Han Solo",
"Princess Leia Organa",
"Obi Wan Kenobi",
"Yoda",
"R2-D2",
"C-3PO",
"Anakin Skywalker",
"Darth Vader",
"Lando Calrissian",
"Padme Amidala",
"Boba Fett",
"Emperor Palpatine",
"Jar Jar Binks"
)
character_cols <- names(starwarsdata)[17:30]
stopifnot(length(character_names) == length(character_cols))
character_summary <- tibble(
Character = rep(character_names, each = 4),
Sentiment = rep(
c("Favorable", "Neutral", "Unfavorable", "Unfamiliar"),
times = length(character_names)
),
Percent = c(
# Luke Skywalker
93, 5, 2, 1,
# Han Solo
92, 5, 1, 2,
# Princess Leia Organa
91, 6, 2, 1,
# Obi Wan Kenobi
91, 5, 2, 2,
# Yoda
91, 6, 2, 1,
# R2-D2
90, 7, 2, 1,
# C-3PO
85,10, 4, 2,
# Anakin Skywalker
62,16,15, 6,
# Darth Vader
58,10,30, 1,
# Lando Calrissian
45,29, 9,18,
# Padme Amidala
43,25,11,20,
# Boba Fett
36,31,17,16,
# Emperor Palpatine
39,26,24,19,
# Jar Jar Binks
29,20,37,13
)
)
character_summary$Character <- factor(
character_summary$Character,
levels = rev(character_names)
)
character_summary$Sentiment <- factor(
character_summary$Sentiment,
levels = c("Favorable", "Neutral", "Unfavorable", "Unfamiliar")
)
sentiment_colors <- c(
Favorable = "#7CB342",
Neutral = "#4FC3F7",
Unfavorable = "#E53935",
Unfamiliar = "#BDBDBD"
)
ggplot(
character_summary,
aes(x = Percent, y = Character, fill = Sentiment)
) +
geom_col(width = 0.65) +
geom_text(
aes(label = paste0(round(Percent), "%")),
hjust = -0.15,
size = 3
) +
facet_grid(
. ~ Sentiment,
scales = "free_x",
space = "fixed"
) +
scale_fill_manual(values = sentiment_colors) +
scale_x_continuous(
limits = c(0, 100),
expand = expansion(mult = c(0, 0.25))
) +
coord_cartesian(clip = "off") +
labs(
title = "'Star Wars' Character Favorability Ratings",
subtitle = "By 834 respondents",
x = NULL,
y = NULL
) +
theme_minimal(base_size = 12) +
theme(
plot.background = element_rect(fill = "#F2F2F2", color = NA),
panel.background = element_rect(fill = "#F2F2F2", color = NA),
panel.grid.major.y = element_blank(),
panel.grid.major.x = element_blank(),
panel.grid.minor = element_blank(),
strip.text = element_text(face = "bold"),
axis.text.x = element_blank(),
legend.position = "none",
plot.title = element_text(face = "bold", size = 16),
plot.subtitle = element_text(size = 12)
)