Side by side bar charts using ggplot2 I am a current undergraduate student working on my first small research project. I am trying to make 3 barcharts of percentages of experiencing racism side by side and I am having trouble with this. I successfully made the 3 different barcharts I just want them to be right next to each other. Could anyone help me with this?
Code I used:
#discr when applying
a <-data.frame(Response = c("No", "Yes"), 
                Percent =c(37.31,62.69))
ggplot(a, aes(reorder(Response, -Percent), Percent)) + 
     geom_bar(stat= "identity", fill="#7a0019", 
       colour = "black") + theme(text=element_text(size = 10)) + 
     xlab("Survey Response") + geom_text(aes(label = Percent), 
      vjust = -0.5, size=4, col="black") + 
     ggtitle("Experienced Racial/Ethnic Discrimination \nWhen 
          Applying for Food Assistance")

#discr using benefits
b <-data.frame(Response = c("No","Yes"), Percent =c(36.23,63.77))
ggplot(b, aes(reorder(Response, -Percent), Percent)) + 
    geom_bar(stat= "identity", fill="#7a0019", colour = "black")
    + theme(text=element_text(size = 10)) + 
    xlab("Survey Response") + geom_text(aes(label = Percent), 
        vjust = -0.5, size=4, col="black") + 
      ggtitle("Experienced Racial/Ethnic Discrimination \nWhen 
       Using Benefits to Purchase Food")

#discr at food pantries
c <-data.frame(Response = c("No", "Yes"), Percent =c(41.77, 58.23))
ggplot(c, aes(reorder(Response, -Percent), Percent)) + 
    geom_bar(stat= "identity", fill="#7a0019", colour = "black") 
    + theme(text=element_text(size = 10)) + 
      xlab("Survey Response") + 
      geom_text(aes(label = Percent), vjust = -0.5, size=4, 
      col="black") + 
      ggtitle("Experienced Racial/Ethnic Discrimination \nWhen 
            Visiting a Food Pantry")

 A: I'm partial to using small multiples.
First, stack the data frames. Next, put subtitles next to each survey response. Now simply facet by Type and it should give you a fairly clean plot.
new_df <- rbind(a, b, c)  # stack the data frames
new_df$Type <- c(rep("Applying for Food Assistance", 2), rep("Using Benefits to Purchase Food", 2), rep("Visiting a Food Pantry", 2))  # assign the subtitles

Let's preview the data frame first.
new_df
  Response Percent                            Type
1       No   37.31    Applying for Food Assistance
2      Yes   62.69    Applying for Food Assistance
3       No   36.23 Using Benefits to Purchase Food
4      Yes   63.77 Using Benefits to Purchase Food
5       No   41.77          Visiting a Food Pantry
6      Yes   58.23          Visiting a Food Pantry

Note how we only need to call ggplot() once.
ggplot(new_df, aes(x = reorder(Response, -Percent), y = Percent)) + 
  geom_bar(stat = "identity", fill = "#7a0019", colour = "black") +
  scale_y_continuous(limits = c(0, 70)) +  # expand the limits to help see the labels
  xlab("Survey Response") + 
  theme_minimal() +  # applying a minimalistic theme
  theme(text = element_text(size = 10)) + 
  geom_text(aes(label = Percent), vjust = -0.5, size = 4, col = "black") +
  ggtitle("Experienced Racial/Ethnic Discrimination When...") +
  facet_wrap(~ Type)  # facet by subtitle


If you don't like this presentation, then maybe the ggpubr package is your friend. The ggarrange() function will help you arrange multiple plots on one page. Simply feed the function the list of plots.
The following code should work, though you may have to play around with the text size to make it more presentable.
#install.packages("ggpubr")
library(ggpubr)

ggarrange(plot_a, plot_b, plot_c, ncol = 3, nrow = 1)  # arranged side by side

