BSHuniversity
BSHuniversity

Reputation: 368

Aligning text on horizontal bar chart

I've come across several threads pointing out how to annotate bar charts, but I've tried a number of iterations of this code and can't seem to get the text left justified, starting at 0% on the x axis. I've tried to change hjust to "left", 0.95, and progressively larger numbers - none of them have the text tethered to the x origin.

enter image description here

dummy_data <- tibble(Proportion = c(0.87, 1),
       `Person of Interest` = c("Person B", "Person A"))

dummy_data %>%
  ggplot(aes(x = Proportion, y = `Person of Interest`, 
             fill = `Person of Interest`,
             label = paste0(`Person of Interest`, "~", scales::percent(Proportion))))+
  geom_col(width = 0.5) + 
  geom_text(position = position_dodge(width = .9),    # move to center of bars
            vjust = 0,    # nudge above top of bar
            hjust = "top",
            size = 4.5,
            colour = "white",
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent, 
                     limits = c(0, 1.01), 
                     expand = c(0, 0)) +
  ggthemes::theme_economist(horizontal = F) + 
  scale_fill_manual(values = alpha(c("black", "#002D62"), .5)) +
  ggtitle("Lack of Skill") + 
  theme(title = element_text("Lack of Skill"),
        plot.title = element_text(hjust = 0.5, face = "italic"),
        axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.x = element_text(hjust = 0.25),
        legend.position="none",
        aspect.ratio = 1/3)

I've often found text data with ggplot maddening - a huge thanks to anyone willing to take a look.

Upvotes: 0

Views: 733

Answers (1)

Duck
Duck

Reputation: 39623

Try this approach that is close to what you want. Your themes can be producing the issues with placing the labels:

#Code
dummy_data %>%
  ggplot(aes(x=`Person of Interest`,
             y=Proportion,
             fill=`Person of Interest`,
             label = paste0(`Person of Interest`, "~", scales::percent(Proportion))))+
  geom_bar(stat = 'identity')+
  geom_text(aes(y=0.13),
            size = 4.5,
            colour = "white",
            fontface = "bold")+coord_flip()+
  scale_y_continuous(labels = scales::percent, 
                     limits = c(0, 1.01), 
                     expand = c(0, 0)) +
  ggthemes::theme_economist(horizontal = F) + 
  scale_fill_manual(values = alpha(c("black", "#002D62"), .5)) +
  ggtitle("Lack of Skill") + 
  theme(title = element_text("Lack of Skill"),
        plot.title = element_text(hjust = 0.5, face = "italic"),
        axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.x = element_text(hjust = 0.25),
        legend.position="none",
        aspect.ratio = 1/3)

Output:

enter image description here

Upvotes: 1

Related Questions