Search code examples
rggplot2geom-bar

How to organize geom_bar() values ​after applying coord.flip()? Package ggplot2


How to place the numbers centralized and in their correct positions? I have tested numerous parameters but I have not found a solution. Everything was very confusing after coordin_flip (). Observe the image and code below.

Code:

# Package
library(ggplot2)

# Create a dataframe
RATE <- c('IgG','IgG','IgA/IgG','IgA/IgG')
GROUP <- c('Asymptomatic','Symptomatic','Asymptomatic','Symptomatic')
N_POSITIVE <- c(12,100,14,107)
PORCENT <- c(7.05, 58.8, 7.73, 59.1)
df <- data.frame(RATE, GROUP, N_POSITIVE, PORCENT)

# Plot
ggplot(df, aes(x = RATE, y = PORCENT, fill = GROUP)) +
  geom_bar(stat="identity", width = 0.5) +
  geom_text(aes(label=N_POSITIVE),
            vjust = -0.3, color = 'black',
            size = 3) +
  coord_flip() +
  labs(x = '', y = 'Percentage (%)\n') +
  scale_fill_manual(values = c("#0073c2", "#efc000")) +
  theme_classic() +
  theme(
    legend.position = "top",
    legend.title = element_blank(),
    axis.text = element_text(angle = 0, color = "black", size = 10, face = 0),
    axis.title.x = element_text(angle = 0, color = "black", size = 12, face = 0))

Image:

enter image description here


Solution

  • Does this do what you want? (minus the other formatting which I left out)

    ggplot(df, aes(x = PORCENT, y  = RATE,  fill = GROUP)) +
      geom_col(width = 0.5) +
      geom_text(aes(label=N_POSITIVE),
                vjust = -0.3, color = 'black', hjust = 1.1,
                size = 3, position = "stack")
    

    (Note, since ggplot2 3.3.0 in March 2020, most geom's don't need coord_flip if you assign them to the axis you want. If it doesn't interpret correctly, there's also an "orientation" parameter but that doesn't seem necessary here. Also, geom_col is equal to geom_bar(stat="identity").)

    enter image description here