For several reasons, I am trying to duplicate the grotesque plot shown below. It violates many precepts of good data visualization so for training purposes my goal is to use ggplot2
and deconstruct it -- remove or revise poorly-chosen features one at a time. Using the data reproduced at the bottom and the code below the plot, I am getting close but have been unable to figure out how to include one notable feature.
Question: Is there a way to reproduce the black shaded rectangle around the three tick labels? (If so, it is straightforward to create another factor variable to identify those three labels and change their font to white.)
ggplot(plotpg19, aes(x = risks, y = scores, fill = colors)) +
geom_bar(stat = "identity", width = 0.6) +
scale_fill_manual(values = c("grey50", "deepskyblue2", "mediumorchid3", "gold")) +
geom_text(aes(label = scores), hjust = -0.4, size = 8, face = "bold") +
coord_flip() +
theme_bw() + labs(x = NULL, y = NULL) +
theme(panel.grid.major = element_blank()) +
guides(fill = FALSE) +
scale_y_continuous(breaks = seq(0, 100, 20), labels = seq(0, 100, 20), expand = c(0, 0)) +
theme(
panel.border = element_blank(),
axis.line = element_line(colour = "black", size = 5, linetype = "solid", lineend = "square")
) +
geom_hline(yintercept = seq(0, 80, 10), colour = "grey30", size = .5, linetype = "dotted") +
theme(axis.line.x = element_blank()) # to get a single axis border, must format both and then blank one
BTW, this question uses symbols for tick labels may offer some insights using the grImport
package but its teachings are beyond me and I am looking for a shaded box around designated tick labels.
plotpg19 <- structure(list(risks.format = structure(c(2L, 3L, 1L, 4L, 5L,
7L, 8L, 6L), .Label = c("Geographic locations in which\n the company operates",
"Inadequate resources for anti-bribery/\ncorruption compliance activities",
"Industries/sector(s) in which\n the company operates",
"Lack of anti-bribery/corruption training\n or awareness within the business",
"Lack of understanding\n by top executives",
"Other", "Rogue employees", "Third parties/associates\n acting on our behalf"
), class = "factor"), risks = structure(c(8L, 7L, 6L, 5L, 4L,
3L, 2L, 1L), .Label = c("Other", "Third parties/associates acting on our behalf",
"Rogue employees", "Lack of understanding by top executives",
"Lack of anti-bribery/corruption training or awareness within the business",
"Geographic locations in which the company operates", "Industries/sector(s) in which the company operates",
"Inadequate resources for anti-bribery/corruption compliance activities"
), class = "factor"), scores = c(15, 28, 71, 16, 5, 48, 55, 2
), colors = c("A", "A", "B", "A", "A", "C", "D", "A")), .Names = c("risks.format",
"risks", "scores", "colors"), row.names = c(NA, -8L), class = "data.frame")