Search code examples
rggplot2geom-bar

apply pallete in geom_bar ggplot


I am trying to apply a pallete to a geom_bar with facets.

Here is my code

est21 <- structure(list(Zona = c("Urbana", "Urbana", "Urbana", "Rural", 
"Urbana", "Urbana", "Urbana", "Rural", "Rural", "Urbana", "Rural", 
"Urbana", "Rural", "Urbana", "Urbana", "Urbana", "Rural", "Urbana", 
"Urbana", "Urbana"), Sector = c("Pública", "Pública", "Pública", 
"Pública", "Pública", "CECE", "Pública", "Pública", "Pública", 
"Privada", "Pública", "Privada", "Pública", "Pública", "Pública", 
"Pública", "Pública", "CECE", "Privada", "Pública")), row.names = c(NA, 
20L), class = "data.frame")

ggplot(est21, aes(as.factor(Sector)))+
  geom_bar(width = 0.5, , fill = '#5081ac') +
  xlab('X') +
  ylab('Y') +
  facet_wrap(~Zona) +
  theme(axis.line = element_line(colour = 'black'),
        panel.background = element_blank(),
        axis.text = element_text(size = 18),
        axis.title = element_text(size = 20),
        panel.grid.major.y = element_line(colour = 'gray'),
        panel.grid.minor.y = element_line(colour = 'gray'),
        plot.title = element_text(hjust = 0.5,
                                  size = 20),
        text = element_text(family = 'Sans')) +
  scale_y_continuous(expand = c(0, 0), limits = c(0, 7500)) +
  geom_text(aes(label = scales::percent(prop.table(stat(count)))),
            stat= "count",
            vjust = -.5,
            size = 7) +
  labs(title = 'Proof')

I want a plot like this where the same pallete is used for the facets. Plot


Solution

  • The paletteer package is a nice option as it makes many palettes available in one R package.

    Use fill = Sector inside the aes, and add scale_fill_paletteer_d("vapoRwave::jazzCup") with the chosen palette.

    (I excluded the theme lines just to simplify the example.)

    library(tidyverse)
    library(paletteer)
    
    est21 <- structure(list(Zona = c(
      "Urbana", "Urbana", "Urbana", "Rural",
      "Urbana", "Urbana", "Urbana", "Rural", "Rural", "Urbana", "Rural",
      "Urbana", "Rural", "Urbana", "Urbana", "Urbana", "Rural", "Urbana",
      "Urbana", "Urbana"
    ), Sector = c(
      "Pública", "Pública", "Pública",
      "Pública", "Pública", "CECE", "Pública", "Pública", "Pública",
      "Privada", "Pública", "Privada", "Pública", "Pública", "Pública",
      "Pública", "Pública", "CECE", "Privada", "Pública"
    )), row.names = c(
      NA,
      20L
    ), class = "data.frame")
    
    est21 |>
      mutate(Sector = as.factor(Sector)) |>
      ggplot(aes(Sector, fill = Sector)) +
      geom_bar(width = 0.5) +
      facet_wrap(~Zona) +
      scale_y_continuous(expand = c(0, 0), limits = c(0, 7.5)) +
      scale_fill_paletteer_d("vapoRwave::jazzCup") +
      geom_text(aes(label = scales::percent(prop.table(stat(count)))),
        stat = "count",
        vjust = -.5,
        size = 7
      ) +
      labs(title = "Proof", x = "X", y = "Y")
    

    Created on 2022-07-08 by the reprex package (v2.0.1)