Ggplot- grafico col

COMO ESCREVER UMA BOA PERGUNTA

Bom dia galera, tudo bem?

Estou tentando fazer um gráfico no ggplot utilizando o conceito de camadas.

Consegui fazer no R o gráfico da esquerda, porém meu objetivo seria chegar igual ao da direita.

(Direita fiz no excel).

Alguem tem ideia de como chegar nesse formato da direita com ggplot?

Boa noite, Joel!

Cara, não é muito complicado não. O segredo é justamente tentar pensar nas camadas.

Você precisa de uma camada que represente o 100%, então o que fiz foi criar uma coluna com dplyr::mutate representando isso.

Para realizar o exercício digitei os valores que estão no gráfico, porém, recomendo que quando fizer perguntas, forneça um mínimo exemplo reprodutível, assim fica mais fácil de alguém ajudar.

Sem dúvidas que devem existir outras formas de resolver, mas segue minha solução:

# Carregar pacotes necessários --------------------------------------------
# if(!require("pacman")) install.packages("pacman")
# pacman::p_load(tibble, dplyr, ggplot2, scales)

# carregar apenas pipe
'%>%' <- magrittr::`%>%`

# Gerar base de exemplo ---------------------------------------------------
base_exemplo <- 
  tibble::tribble(
     ~bloco, ~ocupacao,
  "bloco_1",    "0.65",
  "bloco_2",    "0.675",
  "bloco_3",    "0.684",
  "bloco_4",    "0.637"
  ) %>% 
  # corrigindo tipo de coluna
  dplyr::mutate(ocupacao = as.numeric(ocupacao))

# verificando tipos
dplyr::glimpse(base_exemplo)
#> Rows: 4
#> Columns: 2
#> $ bloco    <chr> "bloco_1", "bloco_2", "bloco_3", "bloco_4"
#> $ ocupacao <dbl> 0.650, 0.675, 0.684, 0.637

# Visualizar dados --------------------------------------------------------

base_exemplo %>% 
  # criar coluna de 100%
  dplyr::mutate(ocup_total = 1) %>% 
  
  # plotar
  ggplot2::ggplot() +
  
  # base com os percentuas
  ggplot2::geom_col(ggplot2::aes(x = ocupacao,
                                 y = bloco),
                    fill = "#BBE24A",
                    color = "black",
                    size = .5) +
  
  # base de 100%
  ggplot2::geom_col(ggplot2::aes(x = ocup_total, 
                                 y = bloco),
                    alpha = 0,
                    color = "black",
                    size = .8) +
  
  # rótulos
  ggplot2::geom_text(ggplot2::aes(x = ocupacao, 
                                  y = bloco, 
                                  label = scales::percent(ocupacao, 
                                                          accuracy = .1),
                                  hjust = 1.2),
                     fontface = "bold",
                     size = 5) + 
  # eixos e título
  ggplot2::labs(x = "", y = "") +
  ggplot2::ggtitle("Ocupação por BLOCO", 
                   subtitle = "MZ-2 - 2021-06-16 Total ocupação 66%") +
  

  # Perfurmaria
  
  # "gruda" as barras no eixo e formata o eixo x como percentual
  ggplot2::scale_x_continuous(expand = ggplot2::expansion(0,0), 
                              labels = scales::percent_format()) +
  
  # aplica um tema
  ggplot2::theme_minimal()+
  
  # aplica ajustes adicionais
  ggplot2::theme(
    
    # deixa o título em negrito
    plot.title = ggplot2::element_text(face = "bold"),
    
    # deixa os eixos em negrito
    axis.text = ggplot2::element_text(face = "bold"),
    
    # coloca uma linha reta de tamanho '1' no eixo y
    axis.line.y = ggplot2::element_line(size = 1),
    
    # ajusta as margens
    plot.margin = ggplot2::unit(c(1,1,1,1), "cm")
  )

Created on 2021-06-16 by the reprex package (v2.0.0)

Espero que ajude.

Abraços.

3 curtidas

TOP!

Muito Obrigado pelas dicas. Era esse conceito mesmo.

1 curtida